设计模式系列——外观模式

259 阅读2分钟

原创:花括号MC(微信公众号:huakuohao-mc),欢迎分享,转载请保留出处。

外观模式主要用于屏蔽内部细节,对外提供一个统一的接口和方法。比如大家经常用的SL4J就是外观模式最好的应用。

举个例子

还是拿图形生成来举例,定义一个图形接口,然后分别定义具体的圆形,长方形和正方形来实现图形接口。为了让客户端代码更加简单的使用相应的功能接口,而不必了解更多的图形细节,可以通过使用外观模式来实现。定义一个外观类,将各个图形的复杂性封装起来,使其对客户端来说只需要和外观类进行交互,而不用关心具体的业务实现类。

先来看一下UML图:

facade.png

再来看一下具体代码实现

Shape接口

public interface Shape {
    void draw();
}

Circle实现类

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

RectangleSquare 类实现和Circle类似,因篇幅原因省略。

看一下外观类

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

客户端这样使用代码

public class FacadePatternDemo {
    public static void main(String[] args){
        ShapeMaker shapeMaker = new ShapeMaker();
        //客户端只需要和外观类打交道
        shapeMaker.drawCircle();
        shapeMaker.drawRectangle();
        shapeMaker.drawSquare();
    }
}

总结

外观模式是结构型模式之一,主要用于屏蔽复杂的内部接口,对外提供一个统一的调用方式和类。

本文参考 www.tutorialspoint.com/design_patt…

推荐阅读

1. Java并发编程那些事儿(十)——最后的总结

2. 程序员应该掌握的常用网络问题定位工具

3. Awk这件上古神兵你会用了吗

4. 手把手教你搭建一套ELK日志搜索运维平台