首页 > 其他分享 >23种设计模式之原型模式

23种设计模式之原型模式

时间:2024-05-29 22:31:48浏览次数:36  
标签:Prototype 克隆 23 复制 原型 设计模式 public name

原型模式

1、定义

原型模式:使用原型实例指定要创建对象的类型,并且通过复制这个类型来创建新的对象。

2、深克隆与浅克隆

根据在复制原型对象的同时是否复制包含在原型对象中引用类型的成员变量,克隆机制可以分为浅克隆和深克隆。

2.1 浅克隆

简单来说浅克隆就是原型对象被复制时只复制它本身和其中包含的值类型的成员变量,引用类型的成员变量并没有复制。

浅克隆

2.2深克隆

除了对象本身被复制外,对象所包含的所有成员变量也将被复制。

深克隆

3、原型模式结构

  • Prototype(抽象原型类):声明克隆方法的接口,是所有具体原型类的公共父类,它可以是抽象类也可以是接口,甚至可以是具体实现类
  • ConcretePrototype(具体原型类):实现抽象原型类中声明的克隆方法,在克隆方法中返回一个克隆对象。
  • Client(客户类):让一个原型克隆自身从而创建一个新的对象。

原型模式结构图

4、实例代码

Prototype

public class Prototype implements Cloneable {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public Object clone() {
        try {
            return super.clone();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

ConcretePrototype

public class ConcretePrototype extends Prototype {

    public ConcretePrototype(String name) {
        setName(name);
    }
}

Client

public class Client {
    public static void main(String[] args) {
        Prototype pro = new ConcretePrototype("prototype");
        Prototype pro2 = (Prototype)pro.clone();
        System.out.println(pro.getName());
        System.out.println(pro2.getName());
    }
}
prototype
prototype

5、原型模式的优缺点

5.1优点
  • 当创建对象较为复杂时,使用原型模式可以简化对象的创建过程。
  • 扩展性较好
  • 可以使用深克隆保存对象的状态
5.2缺点
  • 需要为每个类配备一个克隆方法,当这个类需要修改时就要修改源代码,违背开闭原则
  • 实现深克隆时需要编写较为复杂的代码

6、原型模式的使用环境

  • 当一个系统应该独立于它的产品创建、构成和表示时。
  • 当要实例化的类是在运行时刻指定时,例如,通过动态装载。
  • 为了避免创建一个与产品类层次平行的工厂类层次时。
  • 当一个类的实例只能有几个不同状态组合中的一种时。

建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。

标签:Prototype,克隆,23,复制,原型,设计模式,public,name
From: https://blog.csdn.net/qq_38811830/article/details/139280664

相关文章

  • 代码随想录算法训练营第第22天 | 235. 二叉搜索树的最近公共祖先 、701.二叉搜索树中
    二叉搜索树的最近公共祖先相对于二叉树的最近公共祖先本题就简单一些了,因为可以利用二叉搜索树的特性。题目链接/文章讲解:https://programmercarl.com/0235.二叉搜索树的最近公共祖先.html视频讲解:https://www.bilibili.com/video/BV1Zt4y1F7ww/***@param{TreeNode}......
  • 关于 IDEA 2023.3.1总管理配置maven路径
    先调出主页面,再选择主页面中的maven路径配置1、调出主页面. 在设置中搜索System,选中SystemSettings模块,取消Confirm和Reopen模块的勾选     2、重新启动进入主页面点击Customise中的Allsettings,进入总设置,在此进行maven配置即可......
  • 【赛题样题】【大数据应用开发】2023年全国职业院校技能大赛高职组“大数据应用开发”
    2023年全国职业院校技能大赛赛题第03套赛项名称:        大数据应用开发        英文名称: BigDataApplicationDevelopment 赛项组别:        高等职业教育组               赛项编号:            ......
  • 【赛题样题】【大数据应用开发】2023年全国职业院校技能大赛高职组“大数据应用开发”
    2023年全国职业院校技能大赛赛题第04套赛项名称:        大数据应用开发        英文名称: BigDataApplicationDevelopment 赛项组别:        高等职业教育组               赛项编号:             ......
  • 20231325 贾罗祁 《Python程序设计》实验四报告
    20231325贾罗祁2023-2024-2《Python程序设计》实验四报告课程:《Python程序设计》班级:2313姓名:贾罗祁学号:20231325实验教师:王志强实验日期:2024年5月15日必修/选修:公选课1.实验内容Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。课......
  • 2252309-介绍主流源代码管理工具--Github(举例说明具体使用--旅行+兼职平台)
    一、Github介绍目录1、简介2、特点3、优点4、缺点5、使用教程6、举例二、详细介绍1、简介(1)Github的产生:软件开发过程中会因源代码引发各种繁琐的问题,如版本备份(费空间,费时间)、版本混乱(因版本备份过多造成混乱,难以找回正确的想要版本)、代码冲突(团队开发过程中多人操作同......
  • 设计模式-策略模式
    在软件开发中,我们经常会遇到在实现一个功能的时候会有多种不同的途径,每一个途径都对应一种算法,此时我们可以使用策略模式来实现灵活地选择解决途径。策略模式的定义在策略模式中,定义了一些独立的类来封装不同的算法,每个类封装一种具体的算法。每个封装算法的类都可以称......
  • 代码随想录算法训练营第二十二天 | 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中
    235.二叉搜索树的最近公共祖先题目链接:https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/文档讲解:https://programmercarl.com/0235.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E8%BF%91%E5%85%AC%E5%85%B1%E7%A5%......
  • 绘唐23AI工具阿祖小说推文软件
    绘唐23AI工具阿祖小说推文软件激活授权方式:https://qvfbz6lhqnd.feishu.cn/wiki/CcaewIWnSiAFgokOwLycwi0Encf《寻找爱情的旅程》今天是我生命中的第1000个日子,也是我决定开始一段新的旅程的日子。我决定离开我熟悉的城市,去寻找真正的爱情。我是一个平凡的女孩,长着一头乌......
  • c/c+设计模式--桥接模式
    桥接模式是软件设计模式的一种,它用于将抽象部分与其实现部分分离,使它们可以独立变化。这种模式通过创建桥接接口,将抽象和实现部分分离,从而使它们可以独立地变化,而不会相互影响。在桥接模式中,有两个重要的概念:抽象和实现。抽象定义了客户端的接口,而实现则提供了具体的实现。通过桥......