类结构
UML类图
初步理解
去火车站,不知道去哪个站台等车,因此有一个大屏幕,会告诉你去哪里检票。这个大屏幕隐藏了火车站站台的细节,而是直接告诉你去哪就行。
代码理解
底部接口
public interface Shape {
void draw();
}接口的三个实现类
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("画圈圈");
}
}
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("画矩形");
}
}
public class Square implements Shape {
@Override
public void draw() {
System.out.println("正方形");
}
}隐藏细节的外观类
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 Demo {
public static void main(String[] args) {
ShapeMaker shapeMaker = new ShapeMaker();
shapeMaker.drawCircle();
shapeMaker.drawRectangle();
shapeMaker.drawSquare();
}
}测试结果
画圈圈 画矩形 正方形
总结
- 我们可以看到,我们直接用一个外观类,就完成了想要的所有功能。
- 这里必须理解下,外观模式和代理模式。外观模式是一个类将其他所有类都包装好了,然后给你用。而代理模式(静态的)是一个类去代理一个基础类。相同之处时都是使用了中间类去完成功能。
- 外观模式是一对多,代理模式是一对一(一个类代理一个类)。即使是动态代理,一个类完成多个类的代理,但是也是由反射完成对应类的寻找,而不是在类中封装多个类属性,封装多个属性的,更加偏向外观模式的定义。



京公网安备 11010502036488号