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 物件也可以在資料不可用的時候提供預設的行為。在空物件模式中,我們建立乙個指定各種要執行的操作的抽象類...