设计模式学习系列之原型模式
来源:互联网 发布:js查找兄弟节点 编辑:程序博客网 时间:2024/04/30 18:37
什么是原型模式?
原型模式(Prototype Pattern)也叫原始模式,是用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
原型模式的关键是什么?
JAVA 中的 Object clone() 方法。我们的类都是从Object类继承而来的,Object类本身提供了clone()方法,但是若要要使用clone()方法需要实现Cloneable接口,否则会抛出CloneNotSupportedException。
这里要注意clone方法本身实现的是一种域对域的拷贝,是一种浅拷贝,因此若我们要拷贝的对象中有一个属性是引用,那么会出现克隆类与原始类共享信息。这样是非常危险的,可能会修改原始数据,因此我们通常需要尽量实现深拷贝。
详解原型模式
原型模式有两种表现形式,简单形式和登记形式。
简单形式:
其中原型模式的简单形式包括三个角色:
1)客户(Client)角色:客户类提出创建对象的请求。
2)抽象原型(Prototype)角色:这是一个抽象角色,通常由一个Java接口或Jave抽象类实现。此角色给出所有的具体原型类所需的接口。
3)具体原型(Concrete Prototype)角色:被复制的对象。此角色需要实现抽象的原型角色所要求的接口。
1)客户(Client)角色:客户类提出创建对象的请求。
2)抽象原型(Prototype)角色:这是一个抽象角色,通常由一个Java接口或Jave抽象类实现。此角色给出所有的具体原型类所需的接口。
3)具体原型(Concrete Prototype)角色:被复制的对象。此角色需要实现抽象的原型角色所要求的接口。
4)原型管理者(Prototype Manager)角色:创建具有原型类的对象,并记录每一个被创建的对象。
Prototype Manager示例代码:
1.具有给一个软件动态加载新功能的能力
2.逃避构造函数的约束。
原型模式的缺点
每一个类都需要配备一个克隆方法。
原型模式的应用场景
一个对象多个修改者的场景:当一个对象需要提供给其他多个对象使用,而且每个对象都需要修改该对象时,我们需要克隆出多个对象供其他调用者使用。
在实际项目中,原型模式通常与工厂模式一起出现,通过clone的方法创建一个对象,然后由工厂方法提供给调用者
参考
《设计模式之禅》
《java与模式》
原型模式(Prototype Pattern)也叫原始模式,是用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
原型模式的关键是什么?
JAVA 中的 Object clone() 方法。我们的类都是从Object类继承而来的,Object类本身提供了clone()方法,但是若要要使用clone()方法需要实现Cloneable接口,否则会抛出CloneNotSupportedException。
这里要注意clone方法本身实现的是一种域对域的拷贝,是一种浅拷贝,因此若我们要拷贝的对象中有一个属性是引用,那么会出现克隆类与原始类共享信息。这样是非常危险的,可能会修改原始数据,因此我们通常需要尽量实现深拷贝。
详解原型模式
原型模式有两种表现形式,简单形式和登记形式。
简单形式:
其中原型模式的简单形式包括三个角色:
1)客户(Client)角色:客户类提出创建对象的请求。
2)抽象原型(Prototype)角色:这是一个抽象角色,通常由一个Java接口或Jave抽象类实现。此角色给出所有的具体原型类所需的接口。
3)具体原型(Concrete Prototype)角色:被复制的对象。此角色需要实现抽象的原型角色所要求的接口。
Client角色示例代码:
public class PrototypeClient { private Prototype prototype; public void operation(Prototype prototype) { this.prototype = prototype.clone(); }}Prototype示例代码:
public interface Prototype extends Cloneable { Prototype clone();}Concrete Prototype示例代码:
public class ConcretePrototype implements Prototype { @Override public Prototype clone() { try { return (Prototype)super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return null; }}登记形式:
1)客户(Client)角色:客户类提出创建对象的请求。
2)抽象原型(Prototype)角色:这是一个抽象角色,通常由一个Java接口或Jave抽象类实现。此角色给出所有的具体原型类所需的接口。
3)具体原型(Concrete Prototype)角色:被复制的对象。此角色需要实现抽象的原型角色所要求的接口。
4)原型管理者(Prototype Manager)角色:创建具有原型类的对象,并记录每一个被创建的对象。
Prototype Manager示例代码:
public class PrototypeManager { private Vector<Prototype> vector = new Vector<>(); public void add(Prototype prototype) { vector.add(prototype); } public Prototype get(int i) { return vector.get(i); } public int size() { return vector.size(); }}原型模式的优点
1.具有给一个软件动态加载新功能的能力
2.逃避构造函数的约束。
原型模式的缺点
每一个类都需要配备一个克隆方法。
原型模式的应用场景
一个对象多个修改者的场景:当一个对象需要提供给其他多个对象使用,而且每个对象都需要修改该对象时,我们需要克隆出多个对象供其他调用者使用。
在实际项目中,原型模式通常与工厂模式一起出现,通过clone的方法创建一个对象,然后由工厂方法提供给调用者
参考
《设计模式之禅》
《java与模式》
1 0
- 设计模式学习系列之原型模式
- 设计模式系列之 原型模式
- 设计模式系列之四:原型模式
- 设计模式学习笔记之原型模式
- 设计模式之原型模式学习
- 设计模式学习笔记之原型模式
- 设计模式学习之总结-原型模式
- 设计模式学习之原型模式
- 设计模式学习之路-原型模式
- 设计模式系列-原型模式
- 设计模式系列-原型模式
- 设计模式系列:原型模式
- 【设计模式系列】--原型模式
- 设计模式系列学习四:原型模式(Prototype)
- Android设计模式系列(10)--SDK源码之原型模式
- Android设计模式系列(10)--SDK源码之原型模式
- Android设计模式系列(10)--SDK源码之原型模式
- 设计模式系列之05-原型模式(Prototype Pattern)
- 337. House Robber III(unsolved)
- 设计模式拾荒之装饰器模式( Decorator Pattern ): 代理模式的双胞胎兄弟
- java编程题:打印出100以内的素数
- String的subString
- Linux系统运维初学之文件与目录
- 设计模式学习系列之原型模式
- LaTeX学习1
- [DFS]poj 2488 A Knight's Journey
- LeetCode : 求二叉树的最短路径
- 【程序11】有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,问每个月的兔子总数为多少?
- Linux中的一些常见技巧
- document.referer浏览器兼容问题
- 模拟实现ASP.NET框架基本功能(三)
- 自定义控件