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

    定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的实例。换句话说,原型模式就是通过复制现在已经存在的对象来创建一个新的对象,而不是使用 new 来创建一个对象。这个复制的结果有2种,一种是是浅复制,另一种是深复制。


    浅复制:通过一个原型实例(这里暂称为老对象)克隆所得到的对象(这里暂时称为新对象),新对象中所有的值类型变量都含有与老对象相同的值,新对象所有的对其他对象的引用都和老对象指向同一个地方,即对引用类型来说,老对象和新对象指向同一个引用对象。

    深复制:和浅复制就一点不同,那就是,新对象所有的对其他对象的引用都是指向了复制过的对象,而不再是和老对象指向同一个对象,也就是说,克隆新对象的同时,克隆了老对象的所有引用并将新对象指向这些引用。

    优点:复制一个对象一般情况下会比创建一个对象性能更高。

    缺点: 1、配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。 2、必须实现 Cloneable 接口。 3、逃避构造函数的约束。

    结构图:

    应用:
    1.定义一个接口, 用来表述所有的颜色对象接口:

    public interface IColorDemo 
    { 
            IColorDemo Clone();
            int Red  {  getset;  } 
            int Green  {  get;   set;  } 
            Quote quoteInstance{get;set}
    }
    publc class Quote{}    

    2.具体类的实现代码:

     public class RedColor : IColorDemo 
     { 
            private int red; 
            private int green; 
            Quote quoteInstance{get;set}
            public int Red 
            { 
                get {  return this.red; } 
                set  {  this.red = value; } 
            } 
            public int Green 
            {
                get  {  return this.green;  } 
                set {  this.green = value; } 
            } 
    }
        

    //浅复制

     public Override IColorDemo Clone() 
    { 
        return (IColorDemo)this.MemberwiseClone(); 
    }

    //深复制,获取浅表副本的同时复制引用。

     public Override IColorDemo Clone() 
    { 
        IColorDemo color = this.MemberwiseClone(); 
        Quote q = new Quote();
        color.quoteIntance = q;
        return color; 
    }
    一直想把之前工作、学习时记录的文档整理到博客上,一方面温故而知新,一方面和大家一起学习 -程序小白
  • 相关阅读:
    javascript之全局函数
    讲真,MySQL索引优化看这篇文章就够了
    aws亚马逊磁盘扩展卷步骤
    google支付回调验证(备用)
    Linux TCP状态TIME_WAIT 过多的处理
    MySQL索引优化分析
    CSS使图片变模糊,亲测非常好用
    linux ss 命令用法说明
    php一行代码获取本周一,本周日,上周一,上周日,本月一日,本月最后一日,上月一日,上月最后一日日期
    有哪些你追了很多女生才明白的道理?
  • 原文地址:https://www.cnblogs.com/wang-jin-fu/p/8313265.html
Copyright © 2011-2022 走看看