设计模式详解-外观模式

类型:结构型模式

实现原理:定义了一个高层接口,向现有的系统中的一组接口提供一致的界面

目的:降低访问复杂系统的内部子系统时的复杂度,简化客户端之间的接口,使系统更加容易使用

何时使用:简化复杂系统,方便操作

解决方法:对客户端和系统解耦,让外观类与系统耦合

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

应用实例:电脑操作系统

优点: 1、解耦 2、灵活 3、安全

缺点:不符合开闭原则,改东西麻烦,继承重写困难。

使用场景:为复杂的模块或子系统提供外界访问的模块

实现

步骤 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();
    }
}
步骤 4
        使用该外观类画出各种类型的形状。

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

        shapeMaker.drawCircle();
        shapeMaker.drawRectangle();
        shapeMaker.drawSquare();
    }
}
步骤 5
        执行程序,输出结果:

        Circle::draw()
        Rectangle::draw()
        Square::draw()
        
这段代码展示了外观模式的实现步骤:

创建一个接口 Shape,其中定义了一个抽象方法 draw(),表示绘制形状的操作。
创建三个实现类 RectangleSquareCircle,它们分别实现了 Shape 接口,并实现了 draw() 方法,用于具体绘制各种形状。
创建一个外观类 ShapeMaker,该类包含了对上述三个形状的引用,通过实例化相应的对象来创建这些形状。外观类提供了三个公共方法 drawCircle()drawRectangle()drawSquare(),分别调用对应形状的 draw() 方法。
创建一个 FacadePatternDemo 类作为主类,通过实例化 ShapeMaker 对象,并调用其方法来使用外观类画出各种类型的形状。
最后执行程序,输出结果依次为 "Circle::draw()""Rectangle::draw()""Square::draw()",表示成功绘制了圆形、矩形和正方形。
这个例子中,外观模式被用于隐藏创建形状对象和调用绘制方法的复杂性。客户端只需要通过外观类提供的简单接口调用方法,而无需了解底层的具体实现。这样可以简化客户端的使用,并且在后续需要修改具体形状的实现时,只需要修改外观类而不影响到客户端代码。```

你可能感兴趣的:(设计模式,外观模式,java)