遞迴物件的設計模式

2021-09-11 10:16:19 字數 2334 閱讀 3606

1、內容

對於樹形結構,當容器物件(如資料夾)的某乙個方法被呼叫時,將遍歷整個樹形結構,尋找也包含這個方法的成員物件(可以是容器物件,也可以是葉子物件)並呼叫執行,牽一而動百,其中使用了遞迴呼叫的機制來對整個結構進行處理。由於容器物件和葉子物件在功能上的區別,在使用這些物件的**中必須有區別地對待容器物件和葉子物件,而實際上大多數情況下我們希望一致地處理它們,因為對於這些物件的區別對待將會使得程式非常複雜。組合模式為解決此類問題而誕生,它可以讓葉子物件和容器物件的使用具有一致性。

2、角色

抽象元件 葉子元件 復合元件 客戶端

3、使用場景

表示物件的『部分-整體』層次結構(特別是結構是遞迴的) 希望使用者忽略組合物件與單個物件的不同,使用者統一的使用組合結構中的所有物件

**4、優點 **

定義了包含基本物件和組合的類層次結構 簡化客戶端**,即客戶端可以一致地使用組合物件和單個物件 更容易增加新型別的元件

5、缺點

很難限制組合中的元件

6、**示例

from abc import abstractmethod,abcmeta

class graphic(metaclass=abcmeta):

'''圖形類'

'' @abstractmethod

def draw(self):

pass

@abstractmethod

def add(self,graphic):

pass

@abstractmethod

def getchildren(self,graphic):

pass

class point(graphic):

'''點'''

def __init__(self,x,y):

self.x = x

self.y = y

def draw(self):

print(self)

def add(self,graphic):

raise typeerror

def getchildren(self,graphic):

raise typeerror

def __str__(self):

return

'點(%s,%s)' %(self.x,self.y)

class line(graphic):

def __init__(self, p1, p2):

self.p1 = p1

self.p2 = p2

def draw(self):

print(self)

def add(self, graphic):

raise typeerror

def getchildren(self):

raise typeerror

def __str__(self):

return

"線段[%s, %s]" % (self.p1, self.p2)

class picture(graphic):

def __init__(self):

self.children =

def add(self,graphic):

def getchildren(self, graphic):

'''返回列表裡面的孩子'

''return self.children

def draw(self):

print('*****=復合圖形*****=')

for i in self.children:

print('所有的孩子們',i)

i.draw()

print('*****=end*****====')

pic1 = picture()

pic1.add(point(2,3))

pic1.add(line(point(1,2), point(4,5)))

pic1.add(line(point(0,1), point(2,1)))

pic2 = picture()

pic2.add(point(-2,-1))

pic2.add(line(point(0,0), point(1,1)))

pic = picture()

pic.add(pic1)

pic.add(pic2)

pic.draw()

.draw這個函式對外表現一致,所有的都呼叫這個方法、

複製**

設計模式(偽物件模式)

偽物件是物件在測試中的乙個替代品,用它測試 更加簡便。例如,替代乙個真實的資料連線 這個真實的資料連線由於一些原因而不能實際連線 你就可以建立乙個偽物件來模擬。這意味著偽物件需要準確地回應 中所呼叫的相同的應用程式介面。物件導向的程式設計之所以豐富多彩,部分是由於物件間的相互聯絡與作用。乙個單一的物...

設計模式 物件池模式

物件池模式,也稱物件池服務,通過迴圈使用物件,減少資源在初始化和釋放時的昂貴損耗。簡單地說,在需要時,從池中提取 不用時,放回池中,等待下乙個請求。典型例子是連線池和執行緒池。從hashtable中取出空閒元素 public synchronized t checkout return null 歸...

設計模式 空物件模式

1.什麼是空物件模式 在空物件模式 null object pattern 中,乙個空物件取代 null 物件例項的檢查。null 物件不是檢查空值,而是反應乙個不做任何動作的關係。這樣的 null 物件也可以在資料不可用的時候提供預設的行為。在空物件模式中,我們建立乙個指定各種要執行的操作的抽象類...