第四天 建立型模式 原型模式

2022-03-05 11:03:32 字數 1936 閱讀 6311

零、原型模式

一、身邊的例子

二、什麼情況下使用

當我們已有乙個物件,並希望建立該物件的乙個完整副本時;

在我們知道物件的某些本分會被改變,但有希望保持原有的物件不變時;

我們想複製乙個複雜的物件時。

三、應用案例

下面我們來看乙個案例,利用原型模式展示乙個圖書的各個版本資訊

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繼承下來,乙個物件要實現轉殖,需要實現...