- 外观模式(门面模式)
- 总结
1. 外观模式(门面模式)
- 需求:假如有三个图形:Circle,Rectangle,Square,各自有各自的方法
- 门面模式:ShapeMaker提供了一个门面,让用户不用关心内部实现,使用这三个图形的任意方法。
- 类图
- Shape接口
public interface Shape {
void draw();
}
- 图形实现类
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Rectangle::draw()");
}
}
public class Square implements Shape {
@Override
public void draw() {
System.out.println("Square::draw()");
}
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Circle::draw()");
}
}
- 外观(门面)类
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();
}
}
2. 总结
- 优点
- 降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类
- 缺点
- 增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”