zoukankan      html  css  js  c++  java
  • CSharp设计模式读书笔记(5):原型模式(学习难度:★★★☆☆,使用频率:★★★☆☆)

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

    模式角色与结构:

    示例代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace CSharp.DesignPattern.PrototypePattern
    {
        class Program
        {
            static void Main(string[] args)
            {
                Prototype obj1 = new ConcretePrototypeA();
                obj1.Attr = "Sunny";
    
                Prototype obj2 = obj1.Clone();
    
                Prototype obj3 = new ConcretePrototypeB();
                obj3.Attr = "Dummy";
    
                Prototype obj4 = obj3.Clone();
    
                Console.ReadLine();
            }
        }
    
        interface Prototype
        {
            Prototype Clone();
            String Attr { get; set; }
        }
    
        class ConcretePrototypeA : Prototype
        {
            public Prototype Clone() //克隆方法
            {
                Prototype prototype = new ConcretePrototypeA(); // 创建新对象
                prototype.Attr = this.attr; // 这里是关键
                return prototype;
            }
    
            public String Attr
            {
                get { return attr; }
                set { attr = value; }
            }
    
            private String attr; //成员属性
        }
    
        class ConcretePrototypeB : Prototype
        {
            public Prototype Clone()
            {
                ConcretePrototypeB prototype = new ConcretePrototypeB();
                prototype.Attr = this.attr;
                return prototype;
            }
    
            public string Attr
            {
                get { return attr; }
                set { attr = value; }
            }
    
            private String attr;
        }
    }

    思考
    能否将上述代码中的Clone()方法写成:public Prototype Clone() { return this; }?

    浅克隆与深克隆
    浅克隆中,如果原型对象的成员变量是值类型,将复制一份给克隆对象;如果原型对象的成员变量是引用类型,则将引用对象的地址复制一份给克隆对象,也就是说原型对象和克隆对象的成员变量指向相同的内存地址。简单来说,在浅克隆中,当对象被复制时只复制它本身和其中包含的值类型的成员变量,而引用类型的成员对象并没有复制
    深克隆中,无论原型对象的成员变量是值类型还是引用类型,都将复制一份给克隆对象,深克隆将原型对象的所有引用对象也复制一份给克隆对象。简单来说,在深克隆中,除了对象本身被复制外,对象所包含的所有成员变量也将复制

     

  • 相关阅读:
    主成分分析(PCA)原理详解_转载
    用eclipse怎么打war包?
    dsLinq.Count() 引发了“System.NullReferenceException”类型的异常
    sql中实现split()功能
    关于SQL Server将一列的多行内容拼接成一行,合并显示在另外表中
    SEM和SEO的区别?
    最适合程序员转行的10大职业
    CPM、CPC、CPA、PFP、CPS、CPL、CPR等广告术语是什么意思
    什么是CPC,CPA,CVR,CTR,ROI
    SQL SERVER 修改数据库名称(包括 db.mdf 名称的修改)
  • 原文地址:https://www.cnblogs.com/thlzhf/p/2793132.html
Copyright © 2011-2022 走看看