原型模式
定义
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。
浅克隆
对值类型的成员变量进行值的复制,对引用类型的成员变量只复制引用,不复制引用的对象.
深克隆
对值类型的成员变量进行值的复制,对引用类型的成员变量也进行引用对象的复制.
uml
客户(Client)角色:客户端类向原型管理器提出创建对象的请求
抽象原型(Prototype)角色:这是一个抽象角色,通常由一个C#接口或抽象类实现。此角色给出所有的具体原型类所需的接口。在C#中,抽象原型角色通常实现了ICloneable接口。
具体原型(Concrete Prototype)角色:被复制的对象。此角色需要实现抽象的原型角色所要求的接口。
原型管理器(Prototype Manager)角色:创建具体原型类的对象,并记录每一个被创建的对象。
实例与应用
public class Prototype implements Cloneable { private String name; public void setName(String name) { this.name = name; } public String getName() { return this.name; } public Object clone(){ try { return super.clone(); } catch (Exception e) { e.printStackTrace(); return null; } } } public class ConcretePrototype extends Prototype { public ConcretePrototype(String name) { setName(name); } } public class Test { public static void main(String[] args) { Prototype pro = new ConcretePrototype("张三"); Prototype pro2 = (Prototype)pro.clone(); System.out.println(pro.getName()); System.out.println(pro2.getName()); } }
深克隆
public class Prototype implements Cloneable { private ArrayList list = new ArrayList(); public Prototype clone(){ Prototype prototype = null; try{ prototype = (Prototype)super.clone(); prototype.list = (ArrayList) this.list.clone(); }catch(CloneNotSupportedException e){ e.printStackTrace(); } return prototype; } }
优点
1向客户隐藏制造新实例的复杂性
2 提供让客户能够产生未知类型对象的选项。
3某些情况下复制对象比创建对象更有效:使用原型模式创建对象比直接new一个对象在性能上要好的多。使用原型模式的另一个好处是简化对象的创建,使得创建对象像复制粘贴一样简单。
缺点
对象复制有时相当复杂
使用场景
因为以上优点,所以在需要重复地创建相似对象时可以考虑使用原型模式。比如需要在一个循环体内创建对象,假如对象创建过程比较复杂或者循环次数很多的话,使用原型模式不但可以简化创建过程,而且可以使系统的整体性能提高很多。但是使用时应注意引用类型成员变量的复制。使用克隆不会调用对象的构造方法。
相关推荐
JAVA-设计模式-创建型模式-原型模式
C++设计模式-创建型模式-原型模式;C++实现的关键 拷贝构造函数
即原型模式,提供一个已经存在的对象进行新对象创建的接口,一般情况下都是使用Clone接口。 此模式非常简单,简单的说就是复制多个当前对象供使用。Prototype模式允许一个对象再创建另外一个可定制的对象,根本...
创建型模式(抽象工厂模式、工厂方法模式、单例模式、建造者模式、原型模式); 行为型模式(策略模式、 迭代器模式、原型模式、职责链模式、 模板方法、 命令模式、 解释器模式、 中介者模式、 访问者模式、 状态...
6、原型模式(Prototype Pattern) 用意:通过拷贝创建一个新的对象
最新设计模式超级详解课程,课程深入浅出的探讨...├─day01-总览设计模式-05-创建型模式-原型模式.mp4 ├─day01-总览设计模式-06-创建型模式-工厂-简单工厂模式.mp4 ├─day01-总览设计模式-07-创建型模式-工厂-工厂
设计模式05-建造者、原型模式 设计模式06-适配器、桥接、组合模式 设计模式07-组合模式、装饰模式 设计模式09-外观模式、享元模式 设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 ...
C#面向对象设计模式纵横谈(6):Prototype 原型模式(创建型模式)
C#面向对象设计模式纵横谈(6):Prototype 原型模式(创建型模式) 体验课程
C#面向对象设计模式纵横谈(6):Prototype 原型模式(创建型模式) (Level 300)
创建型模式 (100%) 设计模式面面观(5):抽象工厂模式(AbstractFactory)-创建型模式 (100%) 设计模式面面观(6):生成器模式(Builder)-创建型模式 (100%) 设计模式面面观(7):原型模式(Prototype...
这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高...
NULL 博文链接:https://jacky-dai.iteye.com/blog/2295379
介绍了三种创建型设计模式:单例设计模式;原型设计模式;建造者设计模式;
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:...
NULL 博文链接:https://jacky-dai.iteye.com/blog/2297214
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均... 这是第6节:Prototype原型模式创建型模式.part1