Facade設計模式 PYTHON

2021-08-30 08:21:38 字數 3456 閱讀 2261

facade設計模式為子系統中的一組介面提供統一的介面。 它定義了任何子系統都可以使用的更高階別的介面。乙個facade類知道哪個子系統負責請求。

class _ignitionsystem(object):

@staticmethod

def produce_spark():

return true

class _engine(object):

def __init__(self):

self.revs_per_minute = 0

def turnon(self):

self.revs_per_minute = 2000

def turnoff(self):

self.revs_per_minute = 0

class _fueltank(object):

def __init__(self, level=30):

self._level = level

@property

def level(self):

return self._level

@level.setter

def level(self, level):

self._level = level

class _dashboardlight(object):

def __init__(self, is_on=false):

self._is_on = is_on

def __str__(self):

return self.__class__.__name__

@property

def is_on(self):

return self._is_on

@is_on.setter

def is_on(self, status):

self._is_on = status

def status_check(self):

if self._is_on:

print("{}: on".format(str(self)))

else:

print("{}: off".format(str(self)))

class _handbrakelight(_dashboardlight):

pass

class _foglamplight(_dashboardlight):

pass

class _dashboard(object):

def __init__(self):

self.lights =

def show(self):

for light in self.lights.values():

light.status_check()

# facade

class car(object):

def __init__(self):

self.ignition_system = _ignitionsystem()

self.engine = _engine()

self.fuel_tank = _fueltank()

self.dashboard = _dashboard()

@property

def km_per_litre(self):

return 17.0

def consume_fuel(self, km):

litres = min(self.fuel_tank.level, km / self.km_per_litre)

self.fuel_tank.level -= litres

def start(self):

print("\nstarting...")

self.dashboard.show()

if self.ignition_system.produce_spark():

self.engine.turnon()

else:

print("can't start. faulty ignition system")

def has_enough_fuel(self, km, km_per_litre):

litres_needed = km / km_per_litre

if self.fuel_tank.level > litres_needed:

return true

else:

return false

def drive(self, km=100):

print("\n")

if self.engine.revs_per_minute > 0:

while self.has_enough_fuel(km, self.km_per_litre):

self.consume_fuel(km)

print("drove {}km".format(km))

print("l of fuel still left".format(self.fuel_tank.level))

else:

print("can't drive. the engine is turned off!")

def park(self):

print("\nparking...")

self.dashboard.lights["handbreak"].is_on = true

self.dashboard.show()

self.engine.turnoff()

def switch_fog_lights(self, status):

print("\nswitching {} fog lights...".format(status))

boolean = true if status == "on" else false

self.dashboard.lights["fog"].is_on = boolean

self.dashboard.show()

def fill_up_tank(self):

print("\nfuel tank filled up!")

self.fuel_tank.level = 100

# the main function is the client

def main():

car = car()

car.start()

car.drive()

car.switch_fog_lights("on")

car.switch_fog_lights("off")

car.park()

car.fill_up_tank()

car.drive()

car.start()

car.drive()

if __name__ == "__main__":

main()

facade設計模式

facade 外 觀模式,是一種結構型模式,它主要解決的問題是 元件的客戶和元件中各種複雜的子系統有了過多的耦合,隨著外部客戶程式和各子系統的演化,這種過多的耦合 面臨很多變化的挑戰。在這裡我想舉乙個例子 比如,現在有一輛汽車,我們 客戶程式 要啟動它,那我們就要發動引擎 子系統 1 使四個車輪 子...

Facade設計模式

facade模式也叫外觀模式,是由gof提出的23種設計模式中的一種。facade模式為一組具有類似功能的類群,比如類庫,子系統等等,提供乙個一致的簡單的介面。這個一致的簡單的介面被稱作facade。本文介紹設計模式中的外觀 facade 模式的概念,用法,以及實際應用中怎麼樣使用facade模式進...

Facade 設計模式

目的 解決的問題 客戶端需要乙個簡化的介面來覆蓋複雜的子系統的總體功能。討論facade 設計模式通過乙個單一的介面物件來封裝乙個複雜的子系統。這樣減少了學習子系統複雜的學習曲線。它也實現了不同潛在客戶端的低依賴性和解耦。換句話說,如果facade 是唯一訪問子系統的入口,那麼它將限制一些特性何靈活...