zoukankan      html  css  js  c++  java
  • 设计模式之原型模式


    原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。

     作用(解决的问题):简化对象的创建过程。

     优点:
     1、当创建对象的实例较为复杂的时候,使用原型模式可以简化对象的创建过程,通过复制一个已有的实例可以提高实例的创建效率。
     2、扩展性好,由于原型模式提供了抽象原型类,在客户端针对抽象原型类进行编程,符合开闭原则。
     3、原型模式提供了简化的创建结构,工厂方法模式常常需要有一个与产品类等级结构相同的工厂等级结构,而原型模式不需要这样,
     原形模式中产品的复制是通过封装在类中的克隆方法实现的,无需专门的工厂类来创建产品。
     4、可以使用深克隆方式保存对象的状态,使用原型模式将对象复制一份并将其状态保存起来,以便在需要的时候使用(例如恢复到历史某一状态)。

     缺点:
     1、需要为每一个类配置一个克隆方法,而且该克隆方法位于类的内部,当对已有类进行改造的时候,需要修改代码。
     2、在实现深克隆时需要编写较为复杂的代码,而且当对象之间存在多重签到引用时,为了实现深克隆,每一层对象对应的类都必须支持深克隆,实现起来会比较麻烦。

    实现:

    /// <summary>
         /// 克隆接口
         /// </summary>
         /// <typeparam name="T"></typeparam>
        public interface Prototype<T>
        {
            T Clone();
        }
        /// <summary>
        /// 实现类
        /// </summary>
        public class ConcretePrototype : Prototype<ConcretePrototype>
        {
            public ConcretePrototype Clone()
            {
                return (ConcretePrototype)this.MemberwiseClone();
            }
        }

    原型模式说白了就是克隆,不用想的太复杂,定义一个克隆接口,然后去实现就可以了。我们唯独需要注意的是深度复制和浅度复制的问题。

    浅度复制:值类型复制一份数据出来,引用类型只会复制地址,也就是说浅度复制后,母体和克隆体里面的引用类型数据会指向同一个实体。

    深度复制:值类型复制一份数据出来,引用类型会生成一个新的实体,和母体的数据保持一致。虽然母体和克隆体引用类型数据是一样的,但是是两个不同的实体。

  • 相关阅读:
    HRESULT:0x80070057 (E_INVALIDARG)的异常的解决方案
    c# 取两个时间的间隔
    [转]C#算法
    智能仓库管理系统方案(四)
    分页存储过程
    ASP.NET2.0_多语言本地化应用程序(转)
    C#绘图双缓冲技术总结(转)
    C#.net同步异步SOCKET通讯和多线程总结(转)
    WIN2003 sp2中Delphi 7中的Project菜单中Options菜单打不开
    C#关于日期月天数和一年有多少周及某年某周时间段的计算
  • 原文地址:https://www.cnblogs.com/xiaoyulong/p/9461430.html
Copyright © 2011-2022 走看看