创建型--原型模式
来源:互联网 发布:mac office 2011 编辑:程序博客网 时间:2024/05/16 11:46
模式的意图
原型,可以理解为一些复制品的父类型,这些复制品都是从它而来的,而原型模式也就是要解决不希望反复使用类的构造方法创建对象而提出来的一种模式。
用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。
模式的适用性
在某些情况下,可能不希望反复使用类的构造方法创建许多对象,而是希望用该类创建一个对象后,以该对象为原型得到该对象的若干个复制品。
参与者
抽象原型(Prototype):一个接口,负责定义对象复制自身的方法。
具体原型(Concrete Prototype):实现Prototyre接口的类。具体原型实现抽象原型中的方法,以便创建的对象调用该方法复制自己。
原型模式比较简单,容易理解,就是不希望不断的通过构造方法来调用对象,而是希望通过已有的原型为模板来复制对象。
通过例子来了解一下:
抽象原型
Prototype.javapublic interface Prototype {public Object cloneMe() throws CloneNotSupportedException;}
具体原型
Cubic.javapublic class Cubic { double length,width,height; public Cubic(double a, double b, double c) { length = a; width = b; height = c; } public Object cloneMe() throws CloneNotSupportedException { Cubic object = (Cubic)clone(); return object; }}Goat.javapublic class Goat { StringBuffer color; public void setColor(StringBuffer c) { color = c; } public StringBuffer getColor() { return color; } public Object cloneMe() throws CloneNotSupportedException { Object object = null; try { ByteArrayOutputStream outOne = new ByteArrayOutputStream(); ObjectOutputStream outTwo = new ObjectOutputStream(outOne); outTwo.writeObject(this); ByteArrayInputStream inOne = new ByteArrayInputStream(outOne.toByteArray()); ObjectInputStream inTwo = new ObjectInputStream(inOne); object = inTwo.readObject(); } catch (Exception e) { System.out.println(e); } return object; }}
我们在具体原型中定义了两个原型,都实现了cloneMe()这个方法,我们可以通过这两个方法调用来得到这两个具体原型的复制品。
具体类图:
优点
- 当创建类的新实例的代价更大时,使用原型模式复制一个已有的实例可以提高创建新实例的效率。
- 可以动态的保存当前对象的状态。
- 可以在运行时创建新的对象,而无须创建一系列类和继承结构。
- 可以动态的添加、删除原型的复制品。
0 0
- 创建型模式-原型
- 创建型--原型模式
- 原型模式(创建型)
- 创建型模式-原型模式
- 创建型模式---原型模式
- 创建型模式--原型模式
- 创建型模式-原型模式
- 原型模式(创建型模式)
- Prototype原型(创建型模式)
- Prototype原型(创建型模式)
- 【创建型模式】protopyte(原型)
- 原型模式(创建型)
- 创建型之原型模式
- 创建型-原型模式(prototype)
- 设计模式-创建型-原型
- 创建型设计-原型模式
- 【设计模式】创建型模式-原型模式
- 设计模式 - 创建型模式 - 原型模式
- Oracle存储过程基本语法与基础教程(简明清楚且附实例)
- git 使用
- [Material Design]使用RoundedBitmapDrawable快速生成圆角和圆形图片
- DrawCall的介绍
- BeanUtils 读取数据
- 创建型--原型模式
- 郑轻OJ 1396: 愚人节的礼物
- 解决:ORA-12541:TNS:无监听程序
- 图算法—Problem H
- poj之旅——2886
- block相关
- 嵌入式Linux启动优化手记2 U-boot优化
- IOS-UIView的移动
- signal.h