011 門面模式

2022-04-29 15:00:08 字數 4137 閱讀 7247

8-python與設計模式--門面模式假設有一組火警報警系統,由三個子元件構成:乙個警報器,乙個噴水器,乙個自動撥打**的裝置。其抽象如下:

class

alarmsensor:

defrun(self):

print

"alarm ring...

"class

watersprinker:

defrun(self):

print

"spray water...

"class

emergencydialer:

defrun(self):

print

"dial 119...

"

在業務中如果需要將三個部件啟動,例如,如果有乙個煙霧感測器,檢測到了煙霧。在業務環境中需要做如下操作:

if

__name__=="

__main__":

alarm_sensor=alarmsensor()

water_sprinker=watersprinker()

emergency_dialer=emergencydialer()

alarm_sensor.run()

water_sprinker.run()

emergency_dialer.run()

但如果在多個業務場景中需要啟動三個部件,怎麼辦?ctrl+c加上ctrl+v麼?當然可以這樣,但作為碼農的基本修養之一,減少重複**是應該會被很輕易想到的方法。這樣,需要將其進行封裝,在設計模式中,被封裝成的新物件,叫做門面。門面構建如下:

class

emergencyfacade:

def__init__

(self):

self.alarm_sensor=alarmsensor()

self.water_sprinker=watersprinker()

self.emergency_dialer=emergencydialer()

defrunall(self):

self.alarm_sensor.run()

self.water_sprinker.run()

self.emergency_dialer.run()

這樣,業務場景中這樣寫就可以了:

if

__name__=="

__main__":

emergency_facade=emergencyfacade()

emergency_facade.runall()

列印如下:alarm ring...

spray water...

dial 119...

門面模式也叫外觀模式,定義如下:要求乙個子系統的外部與其內部的通訊必須通過乙個統一的物件進行。門面模式提供乙個高層次的介面,使得子系統更易於使用。門面模式注重「統一的物件」,也就是提供乙個訪問子系統的介面。門面模式與之前說過的模板模式有類似的地方,都是對一些需要重複方法的封裝。但從本質上來說,是不同的。模板模式是對類本身的方法的封裝,其被封裝的方法也可以單獨使用;而門面模式,是對子系統的封裝,其被封裝的介面理論上是不會被單獨提出來用的。

優點:1、減少了系統之間的相互依賴,提高了系統的靈活;

2、提高了整體系統的安全性:封裝起的系統對外的介面才可以用,隱藏了很多內部介面細節,若方法不允許使用,則在門面中可以進行靈活控制。

使用場景:

1、為乙個複雜的子系統提供乙個外界訪問的介面。這類例子是生活還是蠻常見的,例如電視遙控器的抽象模型,電信運營商的使用者互動裝置等;

2、需要簡化操作介面時。例如常見的扁平化系統操作介面等,在生活中和工業中都很常見。

1、門面模式的缺點在於,不符合開閉原則,一旦系統成形後需要修改,幾乎只能重寫門面**,這比繼承或者覆寫等方式,或者其它一些符合開閉原則的模式風險都會大一些。

8-python與設計模式--門面模式假設有一組火警報警系統,由三個子元件構成:乙個警報器,乙個噴水器,乙個自動撥打**的裝置。其抽象如下:

class

alarmsensor:

defrun(self):

print

"alarm ring...

"class

watersprinker:

defrun(self):

print

"spray water...

"class

emergencydialer:

defrun(self):

print

"dial 119...

"

在業務中如果需要將三個部件啟動,例如,如果有乙個煙霧感測器,檢測到了煙霧。在業務環境中需要做如下操作:

if

__name__=="

__main__":

alarm_sensor=alarmsensor()

water_sprinker=watersprinker()

emergency_dialer=emergencydialer()

alarm_sensor.run()

water_sprinker.run()

emergency_dialer.run()

但如果在多個業務場景中需要啟動三個部件,怎麼辦?ctrl+c加上ctrl+v麼?當然可以這樣,但作為碼農的基本修養之一,減少重複**是應該會被很輕易想到的方法。這樣,需要將其進行封裝,在設計模式中,被封裝成的新物件,叫做門面。門面構建如下:

class

emergencyfacade:

def__init__

(self):

self.alarm_sensor=alarmsensor()

self.water_sprinker=watersprinker()

self.emergency_dialer=emergencydialer()

defrunall(self):

self.alarm_sensor.run()

self.water_sprinker.run()

self.emergency_dialer.run()

這樣,業務場景中這樣寫就可以了:

if

__name__=="

__main__":

emergency_facade=emergencyfacade()

emergency_facade.runall()

列印如下:alarm ring...

spray water...

dial 119...

門面模式也叫外觀模式,定義如下:要求乙個子系統的外部與其內部的通訊必須通過乙個統一的物件進行。門面模式提供乙個高層次的介面,使得子系統更易於使用。門面模式注重「統一的物件」,也就是提供乙個訪問子系統的介面。門面模式與之前說過的模板模式有類似的地方,都是對一些需要重複方法的封裝。但從本質上來說,是不同的。模板模式是對類本身的方法的封裝,其被封裝的方法也可以單獨使用;而門面模式,是對子系統的封裝,其被封裝的介面理論上是不會被單獨提出來用的。

優點:1、減少了系統之間的相互依賴,提高了系統的靈活;

2、提高了整體系統的安全性:封裝起的系統對外的介面才可以用,隱藏了很多內部介面細節,若方法不允許使用,則在門面中可以進行靈活控制。

使用場景:

1、為乙個複雜的子系統提供乙個外界訪問的介面。這類例子是生活還是蠻常見的,例如電視遙控器的抽象模型,電信運營商的使用者互動裝置等;

2、需要簡化操作介面時。例如常見的扁平化系統操作介面等,在生活中和工業中都很常見。

1、門面模式的缺點在於,不符合開閉原則,一旦系統成形後需要修改,幾乎只能重寫門面**,這比繼承或者覆寫等方式,或者其它一些符合開閉原則的模式風險都會大一些。

18 門面模式

要求乙個子系統的外部與其內部的通訊必須通過乙個統一的物件進行。門面模式提供乙個高層次的介面,使得子系統更易於使用。門面模式注重 統一的物件 也就是提供乙個訪問子系統的介面,除了這個介面不允許有任何訪問子系統的行為發生 門面模式的類圖 facade是門面角色,此角色知曉子系統的所有功能和責任,一般會將...

15 門面模式

門面模式 也稱為 外觀模式。要求乙個子系統的外部與內部的通訊必須通過乙個統一的物件進行。門面模式提供乙個高層次的介面,使得子系統更易於使用。門面模式主要有兩部分組成 facade門面角色 客戶端可以呼叫這個角色的方法。此角色知道所有子系統的所有功能和職責。一般情況下,本角色會將所有客戶端發來的請求委...

(05)門面模式

去醫院看病,可能要去 門診 劃價 取藥,讓患者覺得很複雜。如果有提供接待人員,患者只要和接待員溝通,剩下的交給接待員來處理,這樣就會方便很多。再例如某 展示的資料很多,前端可能呼叫10個介面才能拿到所有首頁的資料。如果後台能前端提供乙個介面,並在該介面中呼叫其他10個介面組裝資料,再把資料返回給前端...