外观模式(Facade)
外观模式:为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观模式是迪米特法则的一种具体实现,通过引入一个新的外观角色来降低原有系统的复杂度,同时降低客户类与子系统的耦合度。
要点
- 当需要简化并统一一个很大的接口或者一群复杂的接口时,使用外观模式
- 实现一个外观模式,需要将子系统组合进外观中,然后将工作委托给子系统执行
- 外观将客户从一个复杂的子系统中解耦
具体实现
-
创建一个接口
public interface Shape { void draw(); }
-
创建实现接口的实体类。
//Rectangle.java public class Rectangle implements Shape { @Override public void draw() { System.out.println("画长方形"); } } //Square.java public class Square implements Shape { @Override public void draw() { System.out.println("画正方形"); } } //Circle.java public class Circle 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 FacadePatternDemo { public static void main(String[] args) { ShapeMaker shapeMaker = new ShapeMaker(); shapeMaker.drawCircle(); shapeMaker.drawRectangle(); shapeMaker.drawSquare(); } }