您的位置:首页 > 编程语言 > Java开发

Java设计模式(9)之外观模式

2018-03-19 11:50 295 查看

外观模式:

客户端访问子系统,需要通过外观对象,外观对象为各个子系统中的各种功能提供一个一致的界面,外观模式相当于定义了一个接口,这个接口使得这些子系统更加容易使用。

类型:

结构型模式

外观模式的3个角色:

客户端Client:访问子系统,需要通过外观对象。

外观对象Façade:为客户端访问子系统提供一个统一的入口。

子系统Modules: 每个子系统有各自特有的功能。

外观模式关系图:



外观模式示例:

子系统模块:

/**
* Create by zhaihongwei on 2018/3/19
*/
public class ModuleA {

public void doAThing() {
System.out.println("A 模块的功能");
}
}

/**
* Create by zhaihongwei on 2018/3/19
*/
public class ModuleB {

public void doBThing() {
System.out.println("B 模块的功能");
}
}

/**
* Create by zhaihongwei on 2018/3/19
*/
public class ModuleC {

public void doCThing() {
System.out.println("C 模块的功能");
}
}


外观对象:

/**
* Create by zhaihongwei on 2018/3/19
*/
public class Facade {

private ModuleA moduleA;
private ModuleB moduleB;
private ModuleC moduleC;

public void doSomething() {
moduleA = new ModuleA();
moduleB = new ModuleB();
moduleC = new ModuleC();

moduleA.doAThing();
moduleB.doBThing();
moduleC.doCThing();
}
}


客户端对象:

/**
* Create by zhaihongwei on 2018/3/19
*/
public class Client {

public static void main(String[] args) {
ModuleA moduleA = new ModuleA();
ModuleB moduleB = new ModuleB();
ModuleC moduleC = new ModuleC();
moduleA.doAThing();
moduleB.doBThing();
moduleC.doCThing();

System.out.println("-----------------------------------------------");

Facade facade = new Facade();
facade.doSomething();
}
}


通过客户端对象,可以看出,在没有外观对象的时候,如果客户端需要使用整个系统时候(整个系统的正常启动可能需要A,B,C三个模块配合使用),必须对所有的子系统进行使用,增加了客户端和子系统之间的耦合度,而为了降低这种耦合的情况,产生了外观模式,只需要通过外观对象,就可以直接操作整个系统了。

外观模式的优点:

降低了客户类与子系统类的耦合度,实现了子系统与客户之间的松耦合关系。

外观模式对客户端屏蔽了子系统组件,使子系统的使用更加简单。

降低原有系统的复杂度和系统中的编译依赖性,并简化了系统在不同平台之间的移植过程。

只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类。

个人感想:

学到这里,个人感觉各种模式之间有很多相似的地方,每种模式的产生应该并不是突然产生的,而是模式之间不断演进的过程,从模式之间的关系图即可以体现出来。

模式之间的关系图可以看这里:模式之间关系图
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  外观模式