facade设计模式 php,门面(Facade)设计模式

门面(Facade)设计模式为子系统中的一组接口提供统一的接口。 它定义了任何子系统都可以使用的更高级别的接口。

一个门面(Facade)类知道哪个子系统负责请求。

如何设计门面(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 = {"handbreak": _HandBrakeLight(), "fog": _FogLampLight()}

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("{:.2f}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()

执行上面程序,生成以下输出 -

54d4168e6695d1e97bacfadf811792af.png

注意:这个程序是设计一个场景。 这是启动汽车或任何车辆的发动机。 如果您观察代码,它还包括驱动,停车和消耗燃料的相关功能。

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值