随笔分类
外观模式
Facade模式
为一组具有相似功能的类群,比如类库、子系统等等,提供一个一致的简单的界面
代码分析
/**
* 子系统 A
*/
public class SystemA {
public void doSomeThing(){
System.out.println("这是A系统的功能...");
}
}
/**
* 子系统 B
*/
public class SystemB {
public void doSomeThing(){
System.out.println("这是B系统的功能...");
}
}
/**
* 门面
* 其实只是对客户端友好而已
* 内部怎么实现不管,只要达成预期的效果即可
*/
public class Facade {
private SystemA systemA;
private SystemB systemB;
public Facade() {
systemA = new SystemA();
systemB = new SystemB();
}
public void doSomeThing(){
systemA.doSomeThing();
systemB.doSomeThing();
}
public void doSomeThingA(){
systemA.doSomeThing();
}
public void doSomeThingB(){
systemB.doSomeThing();
}
}
/**
* 这是A系统的功能...
* 这是B系统的功能...
* 这是A系统的功能...
* 这是B系统的功能...
*/
public class MainClass {
public static void main(String[] args) {
// SystemA systemA = new SystemA();
// systemA.doSomeThing();
//
// SystemB systemB = new SystemB();
// systemB.doSomeThing();
Facade facade = new Facade();
facade.doSomeThing();
facade.doSomeThingA();
facade.doSomeThingB();
}
}
外观模式实现起来十分简单对吧
分析
优点
- 降低了子系统和客户端之间的耦合度,使得子系统的变化不会影响它的客户类
- 对客户屏蔽了子系统组件,使得子系统的变化不会影响调用它的客户类
- 提高了灵活性。不管系统内部如何变化,只要不影响到外观对象,任你自由活动
- 提高了安全性。想让你访问子系统的哪些业务就开通哪些逻辑,不在外观上开通的方法,你就访问不到
缺点
- 不能很好地限制客户端使用子系统,很容易带来未知风险
- 增加新的子系统可能会改变外观类或客户端的源代码,违背了开闭原则
应用场景
- 为一个复杂的模块或子系统提供一个外界访问的接口
- 子系统相对独立,外界对子系统的访问只要黑箱操作即可
- 预防低水平人员带来的风险扩散