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 是唯一訪問子系統的入口,那麼它將限制一些特性何靈活...