Fork me on GitHub

设计模式 - 外观

注意:所有文章除特别说明外,转载请注明出处.

简介

该模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。它向现有的系统添加一个接口,来隐藏系统的复杂性。

注意:在层次化结构中,可以使用外观模式定义系统中每一层的入口。

子系统越来越复杂,增加外观模式提供简单调用接口。构建多层系统结构,利用外观对象作为每层的入口,简化层间调用。

优点

1. 简化调用过程,无需了解深入子系统,防止带来风险

2. 减少系统依赖、松散耦合

3. 更好的划分访问层次

4. 符合迪米特法则,最少知道原则

缺点

1. 增加子系统、扩展子系统行为容易带来风险

2. 不符合开闭原则

相关设计模式

1. 中介者模式

2. 单例模式

3. 抽象工厂模式

外观模式具体实现

1.创建接口

public interface Shape {
   void draw();
}

2.创建实现接口的实体类

public class Rectangle implements Shape {
   @Override
   public void draw() {
      System.out.println("Rectangle::draw()");
   }
}

public class Square implements Shape {
   @Override
   public void draw() {
      System.out.println("Square::draw()");
   }
}

public class Circle implements Shape {
   @Override
   public void draw() {
      System.out.println("Circle::draw()");
   }
}

3.创建一个外观类

public class ShapeMaker {
   private Shape circle;
   private Shape rectangle;
   private Shape square;

   public ShapeMaker() {
      circle = new Circle();
      rectangle = new Rectangle();
      square = new Square();
   }

   public void drawCircle(){
      circle.draw();
   }
   public void drawRectangle(){
      rectangle.draw();
   }
   public void drawSquare(){
      square.draw();
   }
}

4.使用该外观类画出各种类型的形状

public class FacadePatternDemo {
   public static void main(String[] args) {
      ShapeMaker shapeMaker = new ShapeMaker();

      shapeMaker.drawCircle();
      shapeMaker.drawRectangle();
      shapeMaker.drawSquare();      
   }
}

总结

这里的外观模式可以形象的表示为将所有的功能都集成在一个类里面,然后该类提供一个接口给用户,用户通过此接口使用该类里面定义的功能。

外观模式在源码中的应用

本文标题:设计模式 - 外观

文章作者:Bangjin-Hu

发布时间:2019年10月15日 - 09:22:26

最后更新:2020年03月30日 - 08:21:40

原始链接:http://bangjinhu.github.io/undefined/设计模式 - 外观模式 - 重点/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Bangjin-Hu wechat
欢迎扫码关注微信公众号,订阅我的微信公众号.
坚持原创技术分享,您的支持是我创作的动力.