11-Java外观模式/门面模式 ( Facade Pattern )

Java外观模式/门面模式

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

  • 外观模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用

外观模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性

摘要

1. 意图

为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用

2. 主要解决

降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口

3. 何时使用

  • 客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可;
  • 定义系统的入口;

4. 如何解决

客户端不与系统耦合,外观类与系统耦合

5. 关键代码

  • 在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好

6. 应用实例

  • 去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便;
  • JAVA的三层开发模式;

7. 优点

  • 减少系统相互依赖;
  • 提高灵活性;
  • 提高了安全性;

8. 缺点

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

9. 使用场景

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

10. 注意事项

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

实现

  1. 创建一个Shape接口和实现了Shape接口的实体类;
  2. 定义一个外观类ShapeMaker;
  3. 定义类ShapeMaker使用实体类来代表用户对这些类的调用;
  4. 定义类FacadePatternDemo使用ShapeMaker类来显示结果;

范例

1.创建一个接口.

Shape.java

java 复制代码
package com.demo.gof;
public interface Shape {
   void draw();
}

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

Rectangle.java

java 复制代码
package com.demo.gof;
public class Rectangle implements Shape {

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

Square.java

java 复制代码
package com.demo.gof;
public class Square implements Shape {

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

Circle.java

java 复制代码
package com.demo.gof;
public class Circle implements Shape {

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

3. 创建一个外观类

ShapeMaker.java

java 复制代码
package com.demo.gof;
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. 使用该外观类画出各种类型的形状

FacadePatternDemo.java

java 复制代码
package com.demo.gof;
public class FacadePatternDemo {
   public static void main(String[] args) {
      ShapeMaker shapeMaker = new ShapeMaker();

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

编译运行以上 Java 范例,输出结果如下

java 复制代码
$ javac -d . src/main/com.demo/gof/FacadePatternDemo.java
$ java  com.ddkk.gof.FacadePatternDemo
Circle::draw()
Rectangle::draw()
Square::draw()
相关推荐
G皮T8 分钟前
【设计模式】创建型模式(三):单例模式
单例模式·设计模式·singleton
loveLifeLoveCoding15 分钟前
Java List sort() 排序
java·开发语言
草履虫·21 分钟前
【Java集合】LinkedList
java
AngeliaXue23 分钟前
Java集合(List篇)
java·开发语言·list·集合
世俗ˊ24 分钟前
Java中ArrayList和LinkedList的比较
java·开发语言
zhouyiddd29 分钟前
Maven Helper 插件
java·maven·intellij idea
攸攸太上37 分钟前
Docker学习
java·网络·学习·docker·容器
Milo_K1 小时前
项目文件配置
java·开发语言
程序员大金1 小时前
基于SpringBoot+Vue+MySQL的养老院管理系统
java·vue.js·spring boot·vscode·后端·mysql·vim
customer081 小时前
【开源免费】基于SpringBoot+Vue.JS网上购物商城(JAVA毕业设计)
java·vue.js·spring boot·后端·开源