zoukankan      html  css  js  c++  java
  • Design Patterns(六):Prototype PatternVB代码

    结构图




    角色

    l   客户(Client)角色:客户类提出创建对象的请求。
    l   抽象原型(Prototype)角色:这是一个抽象角色,通常由一个C#接口或抽象类实现。此角色给出所有的具体原型类所需的接口。在C#中,抽象原型角色通常事项了ICloneable接口。
    l   具体原型(Concrete Prototype)角色:被复制的对象。此角色需要事项抽象原型角色所要求的接口。
    l   原型管理器(Prototype Manager)角色:创建具体原型类的对象,并记录每一个被创建的对象。

    意图

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

    适用性

    l   要实例化的类是在运行时刻指定时,例如,通过动态装载;
    l   或者为了避免创建一个与产品类层次平行的工厂类层次时;
    l   或者当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。

    浅拷贝和深拷贝之间的区别:


    l        浅拷贝(Shallow Copy)复制出一个和原对象相同类型的新实例,它包含原对象所有值类型成员的复本。对于引用类型字段,仅拷贝它的引用到目标对象。如果改变目标对象中引用型字段的值他将反映在原对象中,也就是说原始对象中对应的字段也会发生变化。

    l        深拷贝(Deep Copy)复制出一个新实例,它包含所有和原对象中对应字段相同(内容相同)的字段,也就是说这个引用和原是对象的引用是不同的,我们在改变新对象中的这个字段的时候是不会影响到原始对象中对应字段的内容参考。

    对比浅拷贝与深拷贝

    运行结果
    The Result--
    9,2,3,
    9,2,3,
    The Result--
    1,2,3,
    9,2,3,

    示意性代码

    浅拷贝结构代码


    带Prototype Manager的原型模式

    结构图

    角色

    l   客户(Client)角色:客户端类向原型管理器提出创建对象的请求。
    l   抽象原型(Prototype)角色:这是一个抽象角色,通常由一个C#接口或抽象类实现。此角色给出所有的具体原型类所需的接口。在C#中,抽象原型角色通常实现了ICloneable接口。
    l   具体原型(Concrete Prototype)角色:被复制的对象。此角色需要实现抽象的原型角色所要求的接口。
    l   原型管理器(Prototype Manager)角色:创建具体原型类的对象,并记录每一个被创建的对象。

    示意性结构代码

    带Manager的示意性代码

    实例
    下面这个例子演示了在原型管理器中存储用户预先定义的颜色原型,客户通过原型管理器克隆颜色对象。
    实例

    Prototype模式的几个要点:
      1、Prototype模式同样用于隔离类对象的使用者和具体类型(易变类)之间的耦合关系,它同样要求这些“易变类”拥有“稳定的接口”。
      2、Prototype模式对于“如何创建易变类的实体对象”采用“原型克隆”的方法来做,它使得我们可以非常灵活地动态创建“拥有某些稳定接口”的新对象,所需工作仅仅是注册一个新类的对象(即原型),然后在任何需要的地方不断地Clone。
      3、Prototype模式中的Clone方法可以利用.NET中的Object类的MemberwiseClone()方法(浅拷贝)或者序列化(深拷贝)来实现。


    参考资料:

    《小议.NET中的对象拷贝》 TerryLee
    《原型模式(Prototype Pattern)》   小山
    《C#面向对象设计模式纵横谈系列课程(6)》     李建中老师

  • 相关阅读:
    1058 A+B in Hogwarts (20)
    1036. Boys vs Girls (25)
    1035 Password (20)
    1027 Colors in Mars (20)
    1009. Product of Polynomials (25)
    1006. Sign In and Sign Out
    1005 Spell It Right (20)
    1046 Shortest Distance (20)
    ViewPager页面滑动,滑动到最后一页,再往后滑动则执行一个事件
    IIS7.0上传文件限制的解决方法
  • 原文地址:https://www.cnblogs.com/sekihin/p/Prototype_Pattern.html
  • Copyright © 2011-2022 走看看
    Creative Commons License 本作品采用 知识共享署名-非商业性使用 2.5 中国大陆许可协议进行许可。