設計模式之中介模式

2022-05-12 03:59:36 字數 4602 閱讀 7450

"""

中介模式:用乙個中介物件來封裝一系列的物件的互動,中介者使各物件不需要顯示地相互引用,從而使耦合鬆散,而且可以獨立地改變他們之間的互動

比如:房客與房東之間的互動過程是由中介來承擔的,房客不需要知道房東是誰,房東也不需要知道房客是誰,有什麼問題,直接找找中介就可以了。

中介模式的三個物件:互動物件、中介者、具體中介者

"""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)

print

(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...

設計模式之中介者模式

中介者模式 假如沒有總經理,下面六個個部門,財務部 市場部 研發部,財務部要發工資,讓大家核對公司需要跟市場部和研發部都通氣,市場部要接個新專案,需要研發部門處理技術,需要財務部出資金,市場部跟各個部門打交道,雖然只有六個個部門,但是關係非常亂 實際上,公司有總經理,各個部門有什麼事情都通報給總結裡...

設計模式之中介者模式

嘮叨幾句 設計模式的案例我已經寫過大部分的案例,但是本人沒有經常寫部落格的習慣,最近在將本人之前在碼雲上的案例直接搬過來 個人感覺容易和外觀模式弄混,所以在這裡做下簡單的比較 外觀模式 本質封裝互動,組合呼叫。就是向外部提供一組功能,但是具體的實現比較複雜,內部有喝多的元件相互組合呼叫,強調的是外觀...