UML关系简单介绍
UML简单使用的介绍
创建型设计模式
Android设计模式-单例模式
Android设计模式-工厂模式
Android设计模式-抽象工厂模式
Android设计模式-建造者模式
Android设计模式-原型模式
结构型设计模式
Android设计模式-代理模式
Android设计模式-装饰模式
Android设计模式-适配器模式
Android设计模式-组合模式
Android设计模式-门面模式
Android设计模式-桥接模式
Android设计模式-享元模式
行为型设计模式
Android设计模式-策略模式
Android设计模式-命令模式
Android设计模式-责任链模式
Android设计模式-模版方法模式
Android设计模式-迭代器模式
Android设计模式-观察者模式
Android设计模式-备忘录模式
Android设计模式-中介者模式
Android设计模式-访问者模式
Android设计模式-状态模式
Android设计模式-解释器模式
1.定义
门面模式也叫做外观模式,是一种常用的封装模式。
要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更容易使用。
2.门面模式UML图
角色介绍
- Facade 门面角色,客户端可以调用这个角色里的方法,用于调用子系统中的方法。此角色知晓子系统的所有功能和责任。一般情况下,本角色会将客户端发来的请求委派到相应的子系统中,也就是说该角色没有实际的业务逻辑,只是一个委托类。
- Subsystem Classes 子系统角色,可以同时有一或者多个子系统,每一个子系统都不是一个单独的类,而是一个类的集合。子系统并不知道门面的存在,对子系统而言,门面角色其实也就相当于客户端操作。
3.简单实现
3.1 子系统角色
public class Class1 {
public void method1(){
System.out.println("我是Class1的方法1");
}
}
public class Class2 {
public void method2(){
System.out.println("我是Class2的方法2");
}
}
public class Class3 {
public void method3(){
System.out.println("我是Class3的方法3");
}
}
3.2 门面角色
public class Facade {
private Class1 class1=new Class1();
private Class2 class2=new Class2();
private Class3 class3=new Class3();
public void m1(){
this.class1.method1();
}
public void m2(){
this.class2.method2();
}
public void m3(){
this.class3.method3();
}
}
打印结果
我是Class1的方法1
我是Class2的方法2
我是Class3的方法3
例子很简单,,几乎不用介绍。。。其实我们平常很多写法都是这样的,也就是封装,抽取方法到工具类等做法。
4.总结
4.1优点
- 减少系统的相互依赖 ,所有的依赖都是对门面对象的依赖,与子系统无关
- 提高了灵活性,依赖减少了,灵活性自然提高了,不管子系统内部如何变化,只要不影响到门面角色,使用方法就不会变。
- 提高了安全性,想提供什么方法就在门面中提供什么方法,不提供的方法,你通过门面是没办法访问到的。
4.2缺点
- 门面模式最大的缺点是不符合开闭原则,对修改关闭,对扩展开放。
4.3使用场景
- 为一个复杂模块或者子系统提供一个供外界访问的接口
- 子系统相对独立,外界对他的访问通过门面角色即可。不必了解其内部具体的逻辑
- 预防低水平人员可能带来的风险,只负责相应子系统,然后调用通过提供门面角色以供外界调用。出问题也就是修改自己的子系统即可。
- 门面角色不参与子系统内的业务逻辑(当然这是最好的了,但是在很多时候,其实大多数人也都是直接在门面中修改调用的逻辑,这样可行,但是不规范而已)