外观模式
介绍
为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。就像下图,facade把众多子系统中通过一个接口统一起来:
适用场景
- 设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。
- 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。
- 维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。
优点
- 实现了子系统与客户端之间的松耦合关系。
- 客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。
- 提高了安全性。
DEMO
子系统:
package factory.pattern.facade;
/**
* Created by FK on 2017/8/1.
*/
public interface Shape {
void draw();
}
package factory.pattern.facade;
/**
* Created by FK on 2017/8/1.
*/
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Circle::draw()");
}
}
package factory.pattern.facade;
/**
* Created by FK on 2017/8/1.
*/
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Rectangle::draw()");
}
}
package factory.pattern.facade;
/**
* Created by FK on 2017/8/1.
*/
public class Square implements Shape {
@Override
public void draw() {
System.out.println("Square::draw()");
}
}
facade :
package factory.pattern.facade;
/**
* Created by FK on 2017/8/1.
*/
public class ShapeFacade {
private Shape circle;
private Shape rectangle;
private Shape square;
public ShapeFacade() {
circle = new Circle();
rectangle = new Rectangle();
square = new Square();
}
public void drawCircle(){
circle.draw();
}
public void drawRectangle(){
rectangle.draw();
}
public void drawSquare(){
square.draw();
}
}
测试类:
package factory.pattern.facade;
/**
* Created by FK on 2017/8/1.
*/
public class FacadeTest {
public static void main(String[] args) {
ShapeFacade shapeFacade = new ShapeFacade();
shapeFacade.drawCircle();
shapeFacade.drawRectangle();
shapeFacade.drawSquare();
}
}
#设计模式#设计模式介绍 文章被收录于专栏
设计模式是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。其实就是经过前人反复使用总结使用得出在不同场景有对应的解决方案。
查看7道真题和解析
