概述
- 原型模式是從一個對象出發(fā)得到一個和自己有相同狀態(tài)的新對象的成熟模式,該模式的關(guān)鍵是將一個對象定義為原型,并為其提供復(fù)制自己的方法。
原型模式的結(jié)構(gòu)
原型模式的結(jié)構(gòu)中包括兩種角色。
- 抽象原型(Prototype)
- 具體原型(ConcretePrototype)
抽象原型(Prototype)
- 一個接口。
- 負(fù)責(zé)定義對象復(fù)制自身的方法。
具體原型(ConcretePrototype)
- 實現(xiàn)Prototype接口的類。
- 具體原型實現(xiàn)抽象原型中的方法,以便所創(chuàng)建的對象調(diào)用該方法復(fù)制自己。
原型模式的優(yōu)點
- 當(dāng)創(chuàng)建類的新實例的代價更大時,使用原型模式復(fù)制一個已有的實例可以提高創(chuàng)建新實例的效率。
- 可以動態(tài)地保存當(dāng)前對象的狀態(tài)。在運行時,可以隨時使用對象流保存當(dāng)前對象的一個復(fù)制品。
- 可以在運行時創(chuàng)建新的對象,而無須創(chuàng)建一系列類和繼承結(jié)構(gòu)。
- 可以動態(tài)地添加、刪除原型的復(fù)制品。
適合原型模式的情景
- 程序需要從一個對象出發(fā),得到若干個和其狀態(tài)相同,并可獨立變化其狀態(tài)的對象時。
- 當(dāng)對象的創(chuàng)建需要獨立于它的構(gòu)造過程和表示時。
- 一個類創(chuàng)建實例狀態(tài)不是很多,那么久可以將這個類的一個實例定義為原型,那么通過復(fù)制該原型得到新的實例可能比重新使用類的構(gòu)造方法創(chuàng)建新實例更方便。