avatar

刘刚刚的blog

采菊东篱下,悠然见南山🦥

  • 首页
  • 大模型应用
  • 常用软件/工具
  • Halo
  • 关于
Home HeadFirst 设计模式--外观模式(Facade Pattern)
文章

HeadFirst 设计模式--外观模式(Facade Pattern)

Posted 2022-12-18 Updated 2024-09- 27
By Administrator
5~7 min read

外观模式将一个或者数个类复杂的一切都隐藏在背后,只露出一个干净的外观


外观模式提供了一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层接口,让子系统更容易使用。

外观模式将具体的实现从子系统中解耦。

与适配器模式的异同:都可以将多个类接口变成客户期望的一个接口,但主要在于编写他们的意图。

在使用外观模式时,容易导致大量的依赖,因此由必要遵守最少知识的OO原则。

设计原则——“最少知识”原则

该原则告诉我们:要减少对象之间的交互,只留下几个密友。

在该对象的方法内,我们只应该调用属于以下范围的方法:

  • 该对象本身

  • 做为该对象方法的参数而被传递进来的对象

  • 此方法所创建或实例化的任何对象

  • 对象的任何组件

采用该原则的缺点:

虽然使用该原则会减少对象之间的依赖,减少维护成本,但是,采用这个原则,也会导致更多的‘包装’类被制造出出来,以处理和其他组件的沟通,可能会减低代码运行的性能。

class Car:
    engin = None
    
    def __init__(self):
        # 初始化发动机
        pass

    def start(self, key):
        
        # 实例化一个对象
        doors = Doors()
        
        # 使用传入的对象的方法
        authorized = key.turns()
        if authorized:
            # 使用自己的对象的方法
            self.engin.start()
            # 使用自身的方法
            self.updateDashboardDisplay()
            # 使用实例化的对象的方法
            doors.lock()
    
    def updateDashboardDisplay(self):
        pass

使用外观模式

书中使用外观模式构造了一个可以一键启动家庭影院的组件。

  1. 使用组合让外观能够访问子系统中的方法

  2. 将子系统中的组件整合成一个统一的接口

class HomeTheaterFacade:
    amp = None
    tuner = None
    dvd = None
    cd = None
    projector = None
    lights = None
    screen = None
    popper = None

    def __init__(self, amp, tuner, dvd, cd, projector, screen, lights, poper):
        self.amp = amp
        self.tuner = tuner
        self.dvd = dvd
        self.cd = cd
        self.projector = projector
        self.screen = screen
        self.lights = lights
        self.popper = poper

    def watchMovie(self, movie):
        print("开始准备看电影")
        self.popper.on()
        self.popper.pop()
        self.lights.dim(10)
        self.screen.down()
        self.projector.on()
        self.projector.wideScreenMode()
        self.amp.on()
        self.amp.setDvd(self.dvd)
        self.amp.setSurroundSound()
        self.amp.setVolume(5)
        self.dvd.on()
        self.dvd.play(movie)

Head First设计模式
设计模式
License:  CC BY 4.0
Share

Further Reading

Dec 29, 2022

HeadFirst 设计模式--命令模式

命令模式通过封装调用把方法封装起来。

Dec 18, 2022

HeadFirst 设计模式--外观模式(Facade Pattern)

外观模式将一个或者数个类复杂的一切都隐藏在背后,只露出一个干净的外观

Dec 14, 2022

HeadFirst 设计模式--适配器模式(Adapter Design Pattern)

适配器模式将一个接口转化为另外一个接口。

OLDER

HeadFirst 设计模式--适配器模式(Adapter Design Pattern)

NEWER

python-迭代器、生成器、协程

Recently Updated

  • 文本切分-语义分割(Semantic Chunking)
  • dify 并发配置优化
  • Typing
  • 大模型返回中json_schema与json_mode的区别
  • Async

Trending Tags

Halo 运维 postgresql 设计模式 linux就该这么学 nas rag odoo python 文本切分

Contents

©2025 刘刚刚的blog. Some rights reserved.

Using the Halo theme Chirpy