"""中介模式:用乙個中介物件來封裝一系列的物件的互動,中介者使各物件不需要顯示地相互引用,從而使耦合鬆散,而且可以獨立地改變他們之間的互動
比如:房客與房東之間的互動過程是由中介來承擔的,房客不需要知道房東是誰,房東也不需要知道房客是誰,有什麼問題,直接找找中介就可以了。
中介模式的三個物件:互動物件、中介者、具體中介者
"""class
interactiveobject:
"""進行互動的物件
"""pass
class
interactiveobjectimpla:
"""實現類a
"""pass
class
interactiveobjectimplb:
"""實現類b
"""pass
class
meditor:
"""中介類
"""def
__init__
(self):
self.
__interactiveobja =interactiveobjectimpla()
self.
__interactiveobjb =interactiveobjectimplb()
definteractive(self):
"""進行互動的操作
"""#
通過self.__interactiveobja和self.__interactiveobjb完成相應的互動操作
pass
#客戶端不可能分別與每個通訊裝置進行直接互動,可以在兩者之間建立乙個裝置管理器
from abc import
abcmeta, abstractmethod
from enum import
enum
class
devicetype(enum):
"""裝置型別
"""typespeaker = 1typemicrophone = 2typecamera = 3
class
deviceitem:
"""裝置項
"""def
__init__(self, id, name, type, isdefault=false):
self.
__id =id
self.
__name =name
self.
__type =type
self.
__isdefault =isdefault
def__str__
(self):
return
"type:
" + str(self.__type) + "
id:" + str(self.__id) + "
name:
" + str(self.__name) + "
isdefault:
" + str(self.__isdefault
)
defgetid(self):
return self.__id
defgetname(self):
return self.__name
defgettype(self):
return self.__type
defisdefault(self):
return self.__isdefault
class
devicelist:
"""裝置列表
"""def
__init__
(self):
self.
__devices =
defadd(self, deviceitem):
self.
__devices
defgetcount(self):
return len(self.__devices
)
defgetbyidx(self, idx):
if idx < 0 or idx >=self.getcount():
return
none
return self.__devices
[idx]
defgetbyid(self, id):
for item in self.__devices
:
if(item.getid() ==id):
return
item
return
none
class devicemgr(metaclass=abcmeta):
@abstractmethod
defenumerate(self):
"""列舉裝置列表
(在程式初始化時,有裝置插拔時都要重新獲取裝置列表
"""pass
@abstractmethod
defactive(self, deviceid):
"""選擇要是用的裝置
"""pass
@abstractmethod
defgetcurdeviceid(self):
"""獲取當前正在使用的裝置id
"""pass
class
speakermgr(devicemgr):
"""揚聲器裝置管理類
"""def
__init__
(self):
self.
__curdeviceid =none
defenumerate(self):
devices =devicelist()
devices.add(deviceitem(
"32ffqwq232-232dsdw3-23dws32-332dwd
", "
realtek high definition audio
", devicetype.typespeaker))
devices.add(deviceitem(
"d22d32333-ddsd23d3-dws3d2-d32dd2
", "
nvidia high definition audio
", devicetype.typespeaker, true))
return
devices
defactive(self, deviceid):
self.
__curdeviceid =deviceid
defgetcurdeviceid(self):
return self.__curdeviceid
class
deviceutil:
"""裝置工具類
"""def
__init__
(self):
self.
__mgrs ={}
self.
__mgrs[devicetype.typespeaker] =speakermgr()
#microphonemgr和cameramgr不再實現
#self.__mgrs[devicetype.typemicrophone] = microphonemgr()
#self.__mgrs[devicetype.typecamera] = cameramgr()
def__getdevicemgr
(self, type):
return self.__mgrs
[type]
defgetdevicelist(self, type):
return self.__getdevicemgr
(type).enumerate()
defactive(self, type, deviceid):
self.
__getdevicemgr
(type).active(deviceid)
defgetcurdeviceid(self, type):
return self.__getdevicemgr
(type).getcurdeviceid()
if__name__ == "
__main__":
deviceutil =deviceutil()
devicelist =deviceutil.getdevicelist(devicetype.typespeaker)
print("
麥克風裝置:")
if devicelist.getcount() >0:
deviceutil.active(devicetype.typespeaker, devicelist.getbyidx(0).getid())
for idx in
range(0, devicelist.getcount()):
device =devicelist.getbyidx(idx)
(device)
print("
當前使用的裝置:
" + devicelist.getbyid(deviceutil.getcurdeviceid(devicetype.typespeaker)).getname())
設計模式之中介者模式
1 抽象中介者,mediator 抽象中介 author jin.li public abstract class mediator2 具體的中介者,主機板 主機板中介 author jin.li public class mainboard extends mediator if colleagu...
設計模式之中介者模式
中介者模式 假如沒有總經理,下面六個個部門,財務部 市場部 研發部,財務部要發工資,讓大家核對公司需要跟市場部和研發部都通氣,市場部要接個新專案,需要研發部門處理技術,需要財務部出資金,市場部跟各個部門打交道,雖然只有六個個部門,但是關係非常亂 實際上,公司有總經理,各個部門有什麼事情都通報給總結裡...
設計模式之中介者模式
嘮叨幾句 設計模式的案例我已經寫過大部分的案例,但是本人沒有經常寫部落格的習慣,最近在將本人之前在碼雲上的案例直接搬過來 個人感覺容易和外觀模式弄混,所以在這裡做下簡單的比較 外觀模式 本質封裝互動,組合呼叫。就是向外部提供一組功能,但是具體的實現比較複雜,內部有喝多的元件相互組合呼叫,強調的是外觀...