外观模式(十一)

Andy 2023年06月08日 544次浏览

隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口
有点像工厂模式,只需要知道用哪个方法能返回什么对象就行,不过还是有区别的,
外观模式在你调用接口的时候你需要的对象都创建好了,

例子:
比如new一个电脑
在 new 电脑的同时把 cpu、内存、硬盘都初始化好并且接好线。
对外暴露方法(启动电脑,关闭电脑)。
启动电脑(按一下电源键):启动CPU、启动内存、启动硬盘
关闭电脑(按一下电源键):关闭硬盘、关闭内存、关闭CPU

菜鸟案例:

我们将创建一个 Shape 接口和实现了 Shape 接口的实体类。下一步是定义一个外观类 ShapeMaker。
ShapeMaker 类使用实体类来代表用户对这些类的调用。FacadePatternDemo,我们的演示类使用 ShapeMaker 类来显示结果。
image.png

这个图先分开看
image.png

很正常的接口和它的三个实现类

下面这个挺重要
image.png

这个类里有三个成员属性,正好是左边Shape的三个实体类,而四个方法一个是ShapeMaker的构造方法给ShapeMaker中的成员变量赋对象,其他的都是那三个实体类的**draw()**方法1,

代码奉上
(1)创建一个接口。
Shape.java

public interface Shape {
   void draw();
}

(2)创建实现接口的实体类。
Rectangle.java

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

Square.java

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

Circle.java

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

(3)创建一个外观类(直接把左边的那三个实体类压进了这个类)
ShapeMaker.java

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

(5)使用该外观类画出各种类型的形状。
FacadePatternDemo.java

public class FacadePatternDemo {
   public static void main(String[] args) {
   //创建ShapeMaker 的对象时,ShapeMaker 的构造方法会给那三个属性赋对象,
      ShapeMaker shapeMaker = new ShapeMaker();
      //分别输出这三个对象的方法
      shapeMaker.drawCircle();
      shapeMaker.drawRectangle();
      shapeMaker.drawSquare();      
   }
}

执行程序,输出结果:

Circle::draw()
Rectangle::draw()
Square::draw()
————————————————
版权声明:本文为CSDN博主「胖墩的IT」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43113679/article/details/99454933