设计模式之外观模式
Facade(外观模式)
一、外观模式简介
外观模式(Facade)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。
核心:
- 1、为子系统中的一组接口提供一个一致的界面
- 2、降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口
- 3、客户端不与系统耦合,外观类与系统耦合
二、外观模式优缺点比较
优点:
- 1、减少系统相互依赖
- 2、提高灵活性
- 3、提高了安全性
缺点:
- 1、不符合开闭原则,如果要改东西很麻烦,继承重写都不合适
使用场景:
- 1、DBUtils类
- 2、为复杂的模块或子系统提供外界访问的模块
- 3、预防低水平人员带来的风险
注意事项:在层次化结构中,可以使用外观模式定义系统中每一层的入口
三、UML类图
四、设计实现
步骤1:创建接口
public interface Shape { void draw(); }
步骤2:创建实现接口的实体类
public class Rectangle implements Shape { @Override public void draw() { System.out.println("Callback Rectangle::draw method"); } } public class Square implements Shape { @Override public void draw() { System.out.println("Callback Square::draw method"); } } public class Circle implements Shape{ @Override public void draw() { System.out.println("Callback Circle::draw method"); } }
步骤3:创建外观类
public class ShapeFacade { private Shape r; private Shape c; private Shape s; public ShapeFacade() { this.r = new Rectangle(); this.c = new Circle(); this.s = new Square(); } public void drawRectangle() { r.draw(); } public void drawCircle() { c.draw(); } public void drawSquare() { s.draw(); } }
步骤4:调用者测试
public class FacadeDemo01 { public static void main(String[] args) { ShapeFacade sf = new ShapeFacade(); sf.drawCircle(); sf.drawRectangle(); sf.drawSquare(); } }
步骤5:运行程序,观察结果
posted on 2020-04-05 22:03 VincentYew 阅读(237) 评论(0) 收藏 举报