六个创建型模式5: 原型模式-Prototype Pattern【学习难度:★★★☆☆,使用频率:★★★☆☆】
来源:互联网 发布:定情信物 知乎 编辑:程序博客网 时间:2024/05/29 13:58
动机就是复制克隆
原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。
原型模式的工作原理很简单:将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝自己来实现创建过程。由于在软件系统中我们经常会遇到需要创建多个相同或者相似对象的情况,因此原型模式在真实开发中的使用频率还是非常高的。原型模式是一种“另类”的创建型模式,创建克隆对象的工厂就是原型类自身,工厂方法由克隆方法来实现。
需要注意的是通过克隆方法所创建的对象是全新的对象,它们在内存中拥有新的地址,通常对克隆所产生的对象进行修改对原型对象不会造成任何影响,每一个克隆对象都是相互独立的。通过不同的方式修改可以得到一系列相似但不完全相同的对象。
原型模式的结构如图7-2所示:
在原型模式结构图中包含如下几个角色:
●Prototype(抽象原型类):它是声明克隆方法的接口,是所有具体原型类的公共父类,可以是抽象类也可以是接口,甚至还可以是具体实现类。
● ConcretePrototype(具体原型类):它实现在抽象原型类中声明的克隆方法,在克隆方法中返回自己的一个克隆对象。
● Client(客户类):让一个原型对象克隆自身从而创建一个新的对象,在客户类中只需要直接实例化或通过工厂方法等方式创建一个原型对象,再通过调用该对象的克隆方法即可得到多个相同的对象。由于客户类针对抽象原型类Prototype编程,因此用户可以根据需要选择具体原型类,系统具有较好的可扩展性,增加或更换具体原型类都很方便。
原型模式的核心在于如何实现克隆方法,下面将介绍两种在Java语言中常用的克隆实现方法:
class ConcretePrototype implements Prototype{ private String attr; //成员属性 public void setAttr(String attr) { this.attr = attr; } public String getAttr() { return this.attr; } public Prototype clone() //克隆方法 { Prototype prototype = new ConcretePrototype(); //创建新对象 prototype.setAttr(this.attr); return prototype; }}
这里有一个例子工作周报的快速创建
我的总结:原型模式就是根据一个对象克隆一个新的对象,挺简单的。
参考链接:
原型模式
- 六个创建型模式5: 原型模式-Prototype Pattern【学习难度:★★★☆☆,使用频率:★★★☆☆】
- 六个创建型模式6:建造者模式-Builder Pattern【学习难度:★★★★☆,使用频率:★★☆☆☆】
- 六个创建型模式1:简单工厂模式-Simple Factory Pattern【学习难度:★★☆☆☆,使用频率:★★★☆☆】
- 六个创建型模式4: 单例模式-Singleton Pattern【学习难度:★☆☆☆☆,使用频率:★★★★☆】
- 六个创建型模式2:工厂方法模式-Factory Method Pattern 【学习难度:★★☆☆☆,使用频率:★★★★★】
- 六个创建型模式3: 抽象工厂模式-Abstract Factory Pattern【学习难度:★★★★☆,使用频率:★★★★★】
- 七个结构型模式5:外观模式-Facade Pattern【学习难度:★☆☆☆☆,使用频率:★★★★★】
- 十一个行为型模式5:中介者模式-Mediator Pattern【学习难度:★★★☆☆,使用频率:★★☆☆☆】
- 七个结构型模式1: 适配器模式-Adapter Pattern【学习难度:★★☆☆☆,使用频率:★★★★☆】
- 七个结构型模式2:桥接模式-Bridge Pattern【学习难度:★★★☆☆,使用频率:★★★☆☆】
- 七个结构型模式4:装饰模式-Decorator Pattern【学习难度:★★★☆☆,使用频率:★★★☆☆】
- 十一个行为型模式3:解释器模式-Interpreter Pattern【学习难度:★★★★★,使用频率:★☆☆☆☆】
- 十一个行为型模式8:状态模式-State Pattern【学习难度:★★★☆☆,使用频率:★★★☆☆】
- 七个结构型模式6: 享元模式-Flyweight Pattern【学习难度:★★★★☆,使用频率:★☆☆☆☆】
- 十一个行为型模式1:职责链模式-Chain of Responsibility Pattern【学习难度:★★★☆☆,使用频率:★★☆☆☆】
- 十一个行为型模式9:策略模式-Strategy Pattern【学习难度:★☆☆☆☆,使用频率:★★★★☆】
- 十一个行为型模式10:模板方法模式-Template Method Pattern【学习难度:★★☆☆☆,使用频率:★★★☆☆】
- 十一个行为型模式11:访问者模式-Visitor Pattern【学习难度:★★★★☆,使用频率:★☆☆☆☆】
- CSS滚动效果隐藏滚动条
- 如何进行需求测试/需求评审
- 作业
- 用JS实现input输入框里的只读属性
- WebGL画点程序v1
- 六个创建型模式5: 原型模式-Prototype Pattern【学习难度:★★★☆☆,使用频率:★★★☆☆】
- 同义词
- Spring+Redis+MyBatis实现缓存整合
- orcle数据库中的例外(异常)
- 于博士Cadence教程内容目录
- WebGL画点程序v2
- tensorflow学习——xml文件写与读
- node学习记录(一)
- 百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系互转