Java设计模式之外观模式
定义:外观模式也称为门面模式,属于结构型模式。外观模式通过定义一个一致性接口,用以屏蔽内部子系统的实现细节,使用端只需跟这个接口发生调用即可实现调用后台的效果。
通俗的讲,就是后台类实在太多,而你想要调用很多个后台类的一些方法,以前你要做的是,每个类都new 一个对象,然后调用这个对象的方法,如果new的对象太多,这显得十分的繁琐。现在使用外观模式,将创建很多个对象的过程放在里面,再向外提供这些对象的调用方法,这样,你就只需new 一个外观类,通过调用外观类的方法来间接的实现了对不同的其他类的方法调用。
简单例子:定义3个类,分别为圆(Circle),正方形(Square),三角形(Triangle)类,里面提供了画圆、画正方形、画三角形的方法。如果是以前,我们需要创建三个对象,然后分别对这三个对象进行方法调用,得到三个图形(当然,这里是为了举例说明外观模式,不要说为什么不把画图形的方法放在一个同一个图形类中)。
没有使用外观模式:
public interface Graph {
void draw();
}
public class Circle implements Graph{
@Override
public void draw() {
System.out.println("画了个圆");
}
}
public class Square implements Graph{
@Override
public void draw() {
System.out.println("画了个正方形");
}
}
public class Triangle implements Graph{
@Override
public void draw() {
System.out.println("画了个三角形");
}
}
测试:
public class Test1 {
public static void main(String[] args) {
Circle cirCle = new Circle();
cirCle.draw();
Square square = new Square();
square.draw();
Triangle triangle = new Triangle();
triangle.draw();
}
}
运行结果:
使用外观模式
增加一个外观类:
public class Facade {
private Circle circle;
private Square square;
private Triangle triangle;
public Facade() {
this.circle = new Circle();
this.square = new Square();
this.triangle = new Triangle();
}
public void DrawC() {
circle.draw();
}
public void DrawS() {
square.draw();
}
public void DrawT() {
triangle.draw();
}
}
测试类:
public class test2 {
public static void main(String[] args) {
Facade facade = new Facade(); //只需创建一个对象
facade.DrawC();
facade.DrawS();
facade.DrawT();
}
}
运行结果: