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; }?

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

     

  • 相关阅读:
    General part中方向选取的作用
    mount part中位置的作用
    关于zero pivot
    Revit二次开发示例:ModelessForm_ExternalEvent
    elasticsearch6.4 memory locking requested for elasticsearch process but memory is not locked
    百度网盘 http://pandownload.com/index.html
    MySQL 5.7主从复制从零开始设置及全面详解——实现多线程并行同步,解决主从复制延迟问题!
    linux 系统优化
    服务器cpu过高修复:操作系统内核bug导致
    Jvm中时区设置方式
  • 原文地址:https://www.cnblogs.com/thlzhf/p/2793132.html
Copyright © 2011-2022 走看看