外观模式和适配器模式都是对接口进行了封装,所以两者比较容易混淆。区分外观模式和适配器模式的关键点在于搞清楚接口封装的原因。,,外观模式是一种优化对象访问的策略,它定义了一个高层接口,使得子系统中的类的客户端可以以与子系统无关的方式来使用子系统。,,而适配器模式则将一个类的接口转换成用户可以调用的另外一个接口,使接口不兼容的两个类可以一起工作。
在计算机编程中,我们经常需要处理大量的对象和类,这些对象和类之间的关系非常复杂,我们需要一种方法来简化这种关系,使得代码更加易于理解和维护,这就是外观模式(Facade Pattern)的作用。
外观模式是一种创建型设计模式,它为子系统中的一组接口提供了一个统一的高层接口,使得子系统更容易使用,外观模式的主要目的是减少客户端与子系统之间的交互,提高系统的灵活性和可扩展性。
在外观模式中,我们定义了一个外观类(Facade Class),这个类封装了子系统中的多个子系统的操作,客户端只需要与外观类进行交互,而不需要关心子系统的具体实现,这样,当子系统发生变化时,客户端无需修改其代码,只需修改外观类即可。
下面我们通过一个简单的例子来说明外观模式的用法,假设我们有一个汽车系统,其中包含发动机、刹车、油门等子系统,每个子系统都有自己的接口和实现,我们希望能够通过一个简单的接口来控制整个汽车系统。
我们定义一个汽车类(Car Class),并在其中封装各个子系统的操作:
class Engine: def start(self): print("Engine started") def stop(self): print("Engine stopped") class Brake: def apply_brake(self): print("Brake applied") class GasPedal: def press_gas(self): print("Gas pedal pressed") def release_gas(self): print("Gas pedal released")
我们定义一个外观类(Car Facade Class),用于封装汽车类中的各个子系统的操作:
class CarFacade: def __init__(self): self.engine = Engine() self.brake = Brake() self.gas_pedal = GasPedal() def start(self): self.engine.start() self.brake.apply_brake() self.gas_pedal.press_gas() def stop(self): self.engine.stop() self.gas_pedal.release_gas() self.brake.apply_brake()
我们可以通过外观类来控制整个汽车系统:
car = CarFacade() car.start() car.stop()
当我们需要修改汽车系统的某个子系统时,只需修改相应的子类即可,而无需修改外观类和客户端代码,如果我们想要添加一个新的功能(如倒车),只需在引擎类中添加相应的方法即可:
class Engine: # ...其他方法... def reverse(self): print("Car is reversing")