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

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

             原型模式其实就是从一个对象再创建一个可定制的对象,而不需要知道任何创建的细节。

    结构图

    Prototype.cs:

    abstract class Prototype
        {
            private string id;
    
            public Prototype(string id)
            {
                this.id = id;
            }
    
            public string Id
            {
                get { return id; }
            }
    
            public abstract Prototype Clone();
        }
    View Code

    ConcretePrototype.cs:

     class ConcretePrototype : Prototype
        {
            public ConcretePrototype(string id)
                : base(id)
            { }
    
            public override Prototype Clone()
            {
                return (Prototype)this.MemberwiseClone();
            }
        }
    View Code


    对于.Net而言,那个原型抽象类Prototype是不用到的,因为克隆太常用,所以在.Net在System命名空间中提供了ICloneable接口,其中包含方法Clone()。

    因此该示例可做如下修改:

    1.删除Prototype.cs

    2.ConcretePrototype.cs修改为如下图

     优点隐藏对象创建的细节,又大大的提高了性能

              如果不使用该模式,而是每次都是用New实例化对象,那么每次都要执行一次构造函数,如果构造函数执行时间很长,那么多次的执行这个初始化操作将非常低效。

    补充:

    浅复制: 被复制对象的所有变量都含有与原来的对象相同的值,而其所有的对其他对象的引用都仍然指向原来的对象。

    深复制:被复制对象会将所有非引用类型的字段复制给新对象,同时将引用类型所指向地址中存的对象复制给新的对象。

    区别:

    浅复制和深复制的区别仅在于对引用类型的对待上,一个是复制的地址,一个是复制的地址指向位置的数据.

            

  • 相关阅读:
    Proj THUDBFuzz Paper Reading: PMFuzz: Test Case Generation for Persistent Memory Programs
    入围 WF 后训练记
    算法竞赛历程
    2021 多校 杭电 第十场
    2021 多校 杭电 第九场
    2021 多校 牛客 第十场
    2021 多校 牛客 第九场
    2021 多校 杭电 第八场
    2021 多校 杭电 第六场
    2021 多校 杭电 第七场
  • 原文地址:https://www.cnblogs.com/qianxingdewoniu/p/3544321.html
Copyright © 2011-2022 走看看