设计模式学习(十九)外观模式

介绍

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。

类图说明

在这里插入图片描述
本类图中定义一个ICar接口,并定义三个BMW、Benz、TESLA类实现该接口,并各自实现run()方法。然后定义一个Facade类,该类引入BMW、Benz、TESLA对象并实例化,并分别定义接口开放给到客户端访问。FacadePattern只需实例化Facade,并且调用Facade包装好的drivexxx方法即可,无需关心子系统内部接口是如何提供的。

代码示例

文件结构如下:
在这里插入图片描述

代码示例如下:

public interface ICar {
    
    
    void run();
}
public class Benz implements ICar {
    
    
    @Override
    public void run() {
    
    
        System.out.println("奔驰车运行中。。");
    }
}
public class BMW implements ICar {
    
    
    @Override
    public void run() {
    
    
        System.out.println("宝马车运行中。。");
    }
}
public class TESLA implements ICar {
    
    
    @Override
    public void run() {
    
    
        System.out.println("特斯拉运行中。。");
    }
}
public class Facade {
    
    
    private Benz benz;
    private BMW bmw;
    private TESLA tesla;

    public Facade(){
    
    
        this.benz = new Benz();
        this.bmw = new BMW();
        this.tesla = new TESLA();
    }

    public void driveBenz(){
    
    
        this.benz.run();
    }

    public void driveBMW(){
    
    
        this.bmw.run();
    }

    public void driveTESLA(){
    
    
        this.tesla.run();
    }
}
public class FacadePattern {
    
    
    public static void main(String[] args) {
    
    

        Facade facade = new Facade();
        facade.driveBenz();
        facade.driveBMW();
        facade.driveTESLA();

    }
}

运行结果如下:
在这里插入图片描述

应用场景

  • 为复杂的模块或子系统提供外界访问的模块
  • 子系统相对独立
  • 预防低水平人员带来的风险

优缺点

优点

  • 减少系统相互依赖
  • 提高灵活性
  • 提高了安全性
  • 在层次化结构中,可以使用外观模式定义系统中每一层的入口

缺点

  • 不符合开闭原则,如果要改东西很麻烦,继承重写都不合适

Guess you like

Origin blog.csdn.net/he_cha_bu/article/details/116424603