用於封裝一系列同事物件互動通訊之中間媒介,此模式可使各同事物件不需要以顯式直接作互動作用,從而使其達到解耦之目的,並可容易日後來改變它們之間的互動,一般應用於一組同事物件已被良好定義但須以複雜方式來進行互動通訊之場合中。
類圖:
示例:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import abc
classmediator(object): #中介者抽象基類
@abc.abstractmethod
def send(self,message,colleague): #轉介互動訊息給colleague
raise notimplementederror
class concretemediator(mediator): #中介者具體類
def __init__(self):
self.colleague1 = ""
self.colleague2 = ""
def send(self,message,colleague):
if self.colleague1== colleague:
self.colleague2.get_message(message)
elif self.colleague2 == colleague:
self.colleague1.get_message(message)
else:
print('無同事物件可處理')
class colleague(object): #同事基類
def __init__(self):
self.mediator = ""
def bind(self,mediator):
self.mediator = mediator
class colleague1(colleague): #同事具體子類1
def send(self, message):
self.mediator.send(message,self) #此self傳參是指定本類給colleague
def get_message(self,message):
print("同事類1接收訊息:",message)
class colleague2(colleague): #同事具體子類2
def send(self, message):
self.mediator.send(message,self)
def get_message(self,message):
print("同事類2接收訊息:",message)
#實際業務邏輯之場景如下:
if __name__ == "__main__":
# 建立同事及中介者具體類
c1 = colleague1()
c2 = colleague2()
cm = concretemediator()
#互動者繫結中介者
c1.bind(cm)
c2.bind(cm)
cm.colleague1 = c1
cm.colleague2 = c2
#物件互動
c1.send('由同事類1發布訊息')
c2.send('由同事類2發布訊息')
輸出:同事類2接收訊息: 由同事類1發布訊息
同事類1接收訊息: 由同事類2發布訊息
總結:
優點:
缺點:
設計模式 行為型模式 中介者模式
抽象中介者 abstract class mediator 具體中介者 class concretemediator extends mediator 從列表框選擇客戶 else if c list 從組合框選擇客戶 else if c cb 抽象元件類 抽象同事類 abstract class c...
設計模式 行為型模式 中介者模式
設計模式 行為型模式 中介者模式 劃分類和物件的職責。進銷存管理,即採購,銷售,庫存。其中類圖 如下 public class purchase else 不再採購ibm電腦 public void refusebuyibm 該purchase定義了採購電腦的標準。根據電腦的銷售情況,往庫存裡放入產...
java行為設計模式 中介者模式
1 模式理解 現在最常見的應該是房屋中介了,或者職介所之類的,以前比較常見的應該是媒婆,信使等,就拿媒婆來說好了,媒婆給人牽線,那是什麼人呢,肯定一邊的女人,一邊是男人,男人跟女人之間通過媒婆來傳遞資訊,從而找到符合要求的另一半。說白了就是乙個物件要呼叫另乙個物件的方法,但是又不直接通個另乙個物件呼...