原创:花括号MC(微信公众号:huakuohao-mc),欢迎分享,转载请保留出处。
外观模式主要用于屏蔽内部细节,对外提供一个统一的接口和方法。比如大家经常用的SL4J就是外观模式最好的应用。
举个例子
还是拿图形生成来举例,定义一个图形接口,然后分别定义具体的圆形,长方形和正方形来实现图形接口。为了让客户端代码更加简单的使用相应的功能接口,而不必了解更多的图形细节,可以通过使用外观模式来实现。定义一个外观类,将各个图形的复杂性封装起来,使其对客户端来说只需要和外观类进行交互,而不用关心具体的业务实现类。
先来看一下UML图:
再来看一下具体代码实现
Shape接口
public interface Shape {
void draw();
}
Circle实现类
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Circle::draw()");
}
}
Rectangle 和 Square 类实现和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…
推荐阅读