• 定义:

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

  • 适用性:

当我们系统中有一些类,在使用的时候都有同样需要大量的创建,而这样的创建是复杂的而且是浪费CPU,内存资源的,为了解决这一问题,就出现了原型模式(深度克隆,浅克隆)

  • 模式思想:

1.  通过使用同一的创建对象方案,尽量避免创建对象复杂过程代码重复出现;

2.  为了节省CPU,内存资源,我们可以让不同的类之间共享一些(业务上允许)资源,从而达到缩小占用内存空间;

3.  这样的一类业务需求本来就具有一定的同一性,我们抽象出一个同一的抽象类(Protype,ICloneable)作为规范,让有这样需求的类实现他们,从而达到了结构同一。

  • 模式图:

  • 模式示例:

原型抽象类:

 public interface ICloneable<T>
{
T Clone();
}

具有原型属性类:

 public class Member:ICloneable<Member>
{
public int ID{get;set;} public string Name{get;set;} public Member Clone()
{
Member member=new Member(){
ID=this.ID,
Name=this.Name
};
return member;
}
}
 public class Product:ICloneable< Product >
{
public int ID{get;set;} public string Name{get;set;} public Member Owner{get;set;} public Product Clone()
{
Product product=new Product (){
ID=this.ID,
Name=this.Name,
Owner=this.Owner // 当前创建者,应该均为一个创建者,所以这里就可以共享Owner,从而节省了内存空间。
};
return product;
}
}
  • 特点:
Protype抽象类特点: 就有一个抽象接口Clone,返回值T(object,尽量使用泛型,避免加压包)
具有原型属性的一些类特点:

都实现了Protype抽象类,都有自己制定规则的Clone方法,内部都采用了符合业务需求的克隆方案(深度克隆还是采用浅克隆,要依据业务来定)。

当然.NET系统中叶提供了类似的接口类ICloneable,并提供了MemberwiseClone()浅克隆方法。

深克隆方案也有:反序列化、反射、new等。

最新文章

  1. T-Sql(七)用户权限操作(grant)
  2. oncontextmenu事件
  3. Divide and conquer:Showstopper(POJ 3484)
  4. 实现memcpy
  5. C#:DataTable内容转换为String(XML)
  6. 黄聪:wordpress如何扩展TinyMCE编辑器,添加自定义按钮及功能
  7. C#调用dll时的类型转换总结
  8. [codevs]1060搞笑世界杯
  9. 深入理解事件(Event)
  10. 使用JAXB解析xml文件(二)
  11. Android官方网站
  12. 鸟哥Linux私房菜基础学习篇学习笔记1
  13. vdom,diff,key 算法的了解
  14. GCD 之线程死锁
  15. Gitlab在centos7上手工安装
  16. MySQL查看和修改wait_timeout
  17. ffmpeg源码分析四:transcode_step函数 (转4)
  18. mybatis-generator命令行生成代码
  19. AJAX方式调用百度天气
  20. Layui 弹出层组件——layer的模块化开发实例应用

热门文章

  1. DWZ框架一些技巧
  2. HTML: 字體設置
  3. P1032 字串变换
  4. Apche Kafka 的生与死 &ndash; failover 机制详解
  5. 发现了一个很好的Pasical编程软件Lazarus
  6. String作为方法参数传递 与 引用传递
  7. PLSQL 设置
  8. Iphone H5上传照片被旋转
  9. hive中关于数据库与表等的基本操作
  10. javascript值和引用