外观模式(Facade Pattern)怎么用?设计模式中的Facade怎么实现?

文章导读
Previous Quiz Next 概述 外观模式隐藏了系统的复杂性,并为客户端提供了一个接口,客户端可以通过该接口访问系统。这种设计模式属于结构型模式,因为这种模式向现有的系统添加了一个接口,以隐藏其复杂性。
📋 目录
  1. 概述
  2. 实现
  3. 步骤 1
  4. 步骤 2
  5. 步骤 3
  6. 示例 - 外观模式演示用法
A A

设计模式 - 外观模式



Previous
Quiz
Next

概述

外观模式隐藏了系统的复杂性,并为客户端提供了一个接口,客户端可以通过该接口访问系统。这种设计模式属于结构型模式,因为这种模式向现有的系统添加了一个接口,以隐藏其复杂性。

该模式涉及单个类,该类为客户端提供客户端所需的方法简化版本,并将调用委托给现有系统类的相应方法。

实现

我们将创建一个 Shape 接口以及实现该 Shape 接口的具体类。下一步定义一个外观类 ShapeMaker

ShapeMaker 类使用这些具体类来将用户的调用委托给这些类。FacadePatternDemo,我们的演示类,将使用 ShapeMaker 类来显示结果。

Facade Pattern UML Diagram

步骤 1

创建接口。

Shape.java

package com.;

public interface Shape {
   void draw();
}

步骤 2

创建实现同一接口的具体类。

Rectangle.java

package com.;

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

Square.java

package com.;

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

Circle.java

package com.;

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

步骤 3

创建外观类。

ShapeMaker.java

package com.;

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();
   }
}

示例 - 外观模式演示用法

使用外观来绘制各种类型的形状。

FacadePatternDemo.java

package com.;

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

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

interface Shape {
   void draw();
}

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

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

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

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();
   }
}

输出

验证输出。

Circle::draw()
Rectangle::draw()
Square::draw()