外观模式
基本介绍
1)外观模式,也叫过程模式:外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
2)外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节
外观模式的注意事项和细节
1)外观模式对外屏蔽了子系统的细节,因此外观模式降低了客户端对于子系统使用的复杂性
2)外观模式对客户端子系统的耦合关系,让子系统内部的模块更易维护和扩展
3)通过合理的使用外观模式,可以帮助我们更好的划分访问的层次
4)在系统需要进行分层设计时,可以考虑使用Facade模式
5)不能过多的或者不合理的使用外观模式,使用外观模式好,还是直接调用模块好,要以让系统有层次,利于维护为目的
案例代码
package com.example.demo.design.facade;
public class Client {
public static void main(String[] args) {
FacadeMaker maker = new FacadeMaker();
maker.A();
maker.B();
maker.C();
}
}
package com.example.demo.design.facade;
public interface Facade {
void name();
}
package com.example.demo.design.facade;
public class FacadeMaker {
private Facade a;
private Facade b;
private Facade c;
public FacadeMaker(){
a = new SystemA();
b = new SystemB();
c = new SystemC();
}
public void A(){
a.name();
}
public void B(){
b.name();
}
public void C(){
c.name();
}
}
package com.example.demo.design.facade;
public class SystemA implements Facade{
@Override
public void name() {
System.out.println("SystemA");
}
}
package com.example.demo.design.facade;
public class SystemB implements Facade{
@Override
public void name() {
System.out.println("SystemB");
}
}
package com.example.demo.design.facade;
public class SystemC implements Facade{
@Override
public void name() {
System.out.println("SystemC");
}
}
结果
外观模式在mybatis中的源码解析
Mybatis中的Configuration去创建MetaObject对象使用到外观模式