定义:用原型实例指定创建对象的种类,并通过拷贝这些原型来创建新的对象。

优点:

1、原型模式向客户隐藏了创建新实例的复杂性

2、原型模式允许动态增加或较少产品类。

3、原型模式简化了实例的创建结构,工厂方法模式需要有一个与产品类等级结构相同的等级结构,而原型模式不需要这样。

4、产品类不需要事先确定产品的等级结构,因为原型模式适用于任何的等级结构

缺点:

1、每个类必须配备一个克隆方法

2、 配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。

示例代码

/*
原型模式:Prototype这里简写为P,用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象 抽象原型:Prototype_P 类,
具体原型:Ferrari_P 类 */
public abstract class Prototype_P {
private string id;
public string Id
{
get { return id;}
private set{ id = value; }
} public Prototype_P(string _id)
{
this.Id = _id;
UnityEngine.Debug.Log ("new");//运行可知,得到多个对象,只需被new了一次
} public abstract Prototype_P Clone(); }
public class Ferrari_P : Prototype_P {

    public Ferrari_P (string _id):base(_id){}

    public override Prototype_P Clone ()
{
return (Prototype_P)this.MemberwiseClone ();
}
}
using UnityEngine;

public class Client_P : MonoBehaviour {

    void Start(){
Prototype_P carPrototype=new Ferrari_P("法拉利"); Prototype_P FerrariClone_1 = carPrototype.Clone ()as Ferrari_P;
Debug.Log (FerrariClone_1.Id); Prototype_P FerrariClone_2 = carPrototype.Clone ()as Ferrari_P;
Debug.Log (FerrariClone_2.Id); Prototype_P FerrariClone_3 = carPrototype.Clone ()as Ferrari_P;
Debug.Log (FerrariClone_3.Id); Prototype_P FerrariClone_4 = carPrototype.Clone ()as Ferrari_P;
Debug.Log (FerrariClone_4.Id); }
}

在.NET中可以很容易地通过实现ICloneable接口(这个接口就是原型,提供克隆方法,相当于与上面代码中 Prototype_P 抽象类)中Clone()方法来实现原型模式,

如果我们想我们自定义的类具有克隆的功能,首先定义类继承与ICloneable接口并实现Clone方法。

最新文章

  1. GDB的使用
  2. 重构第21天 合并继承 (Collapse Hierarchy)
  3. 宏 #,##,_ _VA_ARGS_ _
  4. php创建读取 word.doc文档
  5. HDU_1401——分步双向BFS,八进制位运算压缩,map存放hash
  6. PLSQL Developer安装(Oracle11g+win7_64bit)
  7. jquery交替实现隐藏、显示
  8. FMDatabase 数据库的使用
  9. 重新想象 Windows 8 Store Apps (8) - 控件之 WebView
  10. vue.js之过滤器,自定义指令,自定义键盘信息以及监听数据变化
  11. 免费后台管理UI界面、html源码推荐
  12. PyCharm证书过期:Your license has expired
  13. vue 项目 使用sass,node-sass 安装方法及cnpm下如何安装node sass
  14. WPF效果(GIS三维篇)
  15. string Type
  16. js控制html5 【video】标签中视频的播放和停止
  17. 定位 和 z-index
  18. (转)python3-staticmethod与classmethod
  19. TJU Problem 1090 City hall
  20. easyui制作进度条案例demo

热门文章

  1. 【原创】java中各种集合类的实现浅析
  2. 优动漫PAINT-牵牛花画法教程
  3. Linux 文件系统的层次化结构
  4. PHP JWT初识
  5. CSS 清除浮动 伪类
  6. CentOS的基本设置界面
  7. Java基础学习总结(8)——super关键字
  8. Android Camera子系统之Linux C应用开发人员View
  9. ITOO右击菜单实现
  10. C++写的UrlEncode和UrlDecode