亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

設計模式筆記(6)--原型模式

標簽:
設計模式

解决的问题是:如何快速且精确地复制一个对象

GOF对于原型模式的定义是:“用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。”

所谓的原型模式,其实就是依托一个已经实例化的对象去创建另外一个可以进行定制的对象,而不需要知道创建过程中的具体细节。

public abstract class Prototype{    private Stirng id;    
    //构造函数
    public Prototype(String id)
    {        this.id = id;
    }    public String getId()
    {        return id;
    }    public abstract Prototype Clone();
}public class ConcretePrototype1 extends Prototype{    public ConcretePrototype1(String id)
    {        super(id);
    }    
    @override
    public Prototype Clone()
    {        try
        {            return (Prototype)this.clone();
        }        catch(CloneNotSupportedException e)
        {            return null;
        }
    }
}

java提供了cloneable接口,只需要实现之就可以使用原型模式。
在初始化信息没有改变的情况下,克隆就是最好的进行实例化的方法,这样做不仅仅隐藏了对象创建的具体细节,也大大提高了运行的效率。
原型模式最本质的特点是,在不重新进行初始化对象的情况下,动态获取对象在运行时的状态。


线程安全

当对一个复杂对象进行操作时,从操作的开始一直到操作的结束,被操作的对象一般都会经历若干非法的中间状态,调用一个函数操作某个对象时,常常会使得该对象暂时陷入不可用的状态,等到操作完全结束时,该对象才会重新回到完全可用的状态。如果其他线程企图访问一个处于不可用状态的对象,该对象会发生不能正确响应的情况。

当对一个实例对象进行克隆时,如果恰巧是在多线程的情况下且该对象处于不稳定状态时,那么克隆可能就会失败甚至克隆出一个意料之外的对象。故而线程不安全。
一定要注意,要在对象处于稳定状态时对其进行克隆。


深复制和浅复制

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

深复制:要把复制的对象所有引用的对象都复制一遍。

int[] arrayB = arrayA; // × ×int []arrayB = new int[4];
System.arraycopy(arrayA,0,arrayB,0,4);//√√

原型模式适用于以下几种情况:

  1. 当要实例化的类是在运行时刻指定时

  2. 为了避免创建一个与产品类层次平行的工厂类层次是

  3. 当一个类的实例只能有几个不同状态组合的一种时



作者:球球球球笨
链接:https://www.jianshu.com/p/688baf66577d


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消