零、原型模式
一、身邊的例子
二、什麼情況下使用
當我們已有乙個物件,並希望建立該物件的乙個完整副本時;
在我們知道物件的某些本分會被改變,但有希望保持原有的物件不變時;
我們想複製乙個複雜的物件時。
三、應用案例
下面我們來看乙個案例,利用原型模式展示乙個圖書的各個版本資訊
import copy
from collections import ordereddict
class
book:
def__init__
(self, name, authors, price, **rest):
'''rest的例子有:出版商、長度、標籤、出版日期'''
self.name = name
self.authors = authors
self.price = price
self.__dict__.update(rest)
def__str__
(self):
mylist =
ordered = ordereddict(sorted(self.__dict__.items()))
for i in ordered.keys():
if i == 'price':
return
''.join(mylist)
class
prototype:
def__init__
(self):
self.objects = dict()
defregister
(self, identifiter, obj):
self.objects[identifiter] = obj
defunregister
(self, identifier):
del self.objects[identifier]
defclone
(self, identifier, **attr):
found = self.objects.get(identifier)
ifnot found:
raise valueerror('incorrect object identifier:{}'.format(identifier))
obj = copy.deepcopy(found)
obj.__dict__.update(attr)
return obj
defmain
(): b1 = book('the cprogramming language', ('brian w.kernighan', 'dennis m.ritchie'), price=118,
publisher='prentice hall', length=228, publication_date='1978-02-22',
tags=('c', 'programming', 'algorithma', 'algorihma', 'data structures'))
prototype = prototype()
cid = 'k&r-first'
prototype.register(cid, b1)
b2 = prototype.clone(cid, name='the cprogramming language(ansi)', price=48.99, length=274,
publication_date='1988-04-01', edition=2)
for i in (b1, b2):
print(i)
print('id b1:{}!= id b2:{}'.format(id(b1), id(b2)))
if __name__ == '__main__':
main()
第四天 原型模式 建造者模式
原型模式 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件.涉及到對深複製淺複製的理解.view code 1 class uncopyable 25 uncopyable 67 private 8 uncopyable const uncopyable 9 uncopyable op...
建立型模式(四) Prototype(原型模式)
通過給出乙個原型物件來指明所要建立的物件的型別,然後用複製這個原型物件的方法建立出更多同型別的物件。原始模型模式允許動態的增加或減少產品類,產品類不需要非得有任何事先確定的等級結構,原始模型模式適用於任何的等級結構。缺點是每乙個類都必須配備 乙個轉殖方法。例子 跟mm用qq聊天,一定要說些深情的話語...
建立型模式 原型模式
使用原型例項指定建立物件的種類,並且通過轉殖這些原型建立新的物件 原理是將乙個原型物件傳給要發動建立的物件,該物件通過請求原型物件轉殖自己來建立過程 轉殖方法 public prototype clone jdk中為我們提供了轉殖的方法clone 從object繼承下來,乙個物件要實現轉殖,需要實現...