首页 > 编程语言 >Python: Facade Pattern

Python: Facade Pattern

时间:2022-10-22 07:23:08浏览次数:48  
标签:开车 level Python Pattern self 100km car Facade def

DuFacade.py

import os
import re
import threading

# 外观模式 Facade Pattern


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("{}: 开启".format(str(self)))
        else:
            print("{}: 关闭".format(str(self)))


class _HandBrakeLight(_DashBoardLight):
    pass


class _FogLampLight(_DashBoardLight):
    pass


class _Dashboard(object):

    def __init__(self):
        self.lights = {"手刹": _HandBrakeLight(), "雾": _FogLampLight()}

    def show(self):
        for light in self.lights.values(): light.status_check()


# Facade 列要对齐,否则方法(函数)调用不出来  Geovin Du,geovindu,涂聚文注,格式很关键
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("\n开始启动...")
        self.dashboard.show()
        if self.ignition_system.produce_spark():
            self.engine.turnon()
        else:
            print("不能开始。点火系统故障")

    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("geovindu开车 {}km".format(km))
                    print("剩余的燃料 {:.2f}l ".format(self.fuel_tank.level))
            else:
                print("不能开车。引擎已关闭!")

    def park(self):
                print("\n停车...")
                self.dashboard.lights["手刹"].is_on = True
                self.dashboard.show()
                self.engine.turnoff()

    def switch_fog_lights(self, status):
                print("\n切换 {} 雾灯...".format(status))
                boolean = True if status == "ON" else False
                self.dashboard.lights["雾"].is_on = boolean
                self.dashboard.show()

    def fill_up_tank(self):
                print("\n油箱已满!")
                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()

  

调用:

main.py 

# 外观模式 Facade  Pattern
# DuFacade.main()

car = DuFacade.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()

  

输出:

开始启动...
_HandBrakeLight: 关闭
_FogLampLight: 关闭


开车 100km
剩余的燃料 24.12l 
开车 100km
剩余的燃料 18.24l 
开车 100km
剩余的燃料 12.35l 
开车 100km
剩余的燃料 6.47l 
开车 100km
剩余的燃料 0.59l 

切换 ON 雾灯...
_HandBrakeLight: 关闭
_FogLampLight: 开启

切换 OFF 雾灯...
_HandBrakeLight: 关闭
_FogLampLight: 关闭

停车...
_HandBrakeLight: 开启
_FogLampLight: 关闭

油箱已满!


不能开车。引擎已关闭!

开始启动...
_HandBrakeLight: 开启
_FogLampLight: 关闭


开车 100km
剩余的燃料 94.12l 
开车 100km
剩余的燃料 88.24l 
开车 100km
剩余的燃料 82.35l 
开车 100km
剩余的燃料 76.47l 
开车 100km
剩余的燃料 70.59l 
开车 100km
剩余的燃料 64.71l 
开车 100km
剩余的燃料 58.82l 
开车 100km
剩余的燃料 52.94l 
开车 100km
剩余的燃料 47.06l 
开车 100km
剩余的燃料 41.18l 
开车 100km
剩余的燃料 35.29l 
开车 100km
剩余的燃料 29.41l 
开车 100km
剩余的燃料 23.53l 
开车 100km
剩余的燃料 17.65l 
开车 100km
剩余的燃料 11.76l 
开车 100km
剩余的燃料 5.88l 
开车 100km
剩余的燃料 0.00l 

Process finished with exit code 0

  

 

标签:开车,level,Python,Pattern,self,100km,car,Facade,def
From: https://www.cnblogs.com/geovindu/p/16815241.html

相关文章

  • Python学习三天计划-2
    一、函数函数:是组织好的,可重复使用的,用来实现特定功能的代码段。优点:可供重复利用的代码段提高程序的复用性减少重复性代码提高开发效率1.定义deffunc1():......
  • Python程序员常犯的编码错误(二)
    1.引言本文是Python程序员常犯的编码错误的第二篇,在上一篇中我们重点介绍了常见的五种错误,本文继续介绍该话题,希望大家在日常生活中多多关注。闲话少说,我们直接开始吧!2.......
  • Python: Decorator Pattern
     DuDecorator.py#装饰模式DecoratorPatternimportsix#https://pypi.org/project/six/[email protected]_metaclass(ABCMeta)classAbstra......
  • Selenium+Python系列(三) - 常见浏览器操作
    写在前面上篇文章为大家分享了自动化测试中,常见元素定位的操作。今天再次读文章,居然忘记了大家特别喜欢的CSS和Xpath定位操作分享,这怎么能行呢?马上安利,感兴趣的同学去参......
  • Python RabbitMQ pika的安装及work消息模型的使用
    RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件,RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有......
  • Python pandas 通过时间计算统计每月数据记录数
    在Python中进行数据统计时,有些数据我们可能需要统计每月或指时间范围的数据记录数,本文主要介绍Pythonpandas中通过时间计算统计每月数据记录数的方法,以及相关的示例代码。......
  • Python: Composite Pattern
    DuComposite.py#组合模式CompositePatternfrom__future__importannotationsfromabcimportABC,abstractmethodfromtypingimportListclassComponent(......
  • 3.Python 注释和函数使用
    注释三总:单行注释直接#+内容多行注释三个单引号括起来的内容指定编码注释可以指定文件的中文编码例:#作者:咸瑜#代码时间:2022/10/1715:57''''多行注......
  • 备战python蓝桥杯等级考试系列1.输出hello world
    ​ ​编辑​编辑获取​python从初级到高级学习资料......
  • Python学习:列表和字典练习题
    找出列表list中大于100的值,给字典dic的k1键,小于等于100的值,给字典dic的k2键'''提示:创建字典的两种方式ex:'''v1=[2,3,4,5,]v2=88dic1={'k1':v1,'k2':v2,}......