您的位置:首页 > 其它

设计模式学习--------4.外观模式学习

2014-05-18 17:23 162 查看
转载:/article/1602441.html

场景:

当客户端访问一个子系统中的多个子模块的方法时,既能简单的使用这些子系统内部的模块功能,而又不用客户端

去与子系统内部的多个模块交互.

比如举办一个会议,需要首先预约时间,然后准备会议室,接着就是开会,最后是总结会议成果。如果没有助理,这些

事情我都要自己去一个一个亲自去准备,并且必须知道每一步的具体步骤,这样不但增加了我开会所用的时间也增加了

开一次会议的复杂度。所以我希望有助理能帮我处理这个会议的步骤,然后助理指派手下的4个实习生去准备,实习生A

来负责预约时间,实习生B负责准备会议室,实习生C负责召集开会人员,实习生D负责会议总结,这个助理就是这样一个外

观接口,所有实习生都是负责开会这样一个系统需求的子模块,但有时候我想要进行电话会议,就不需要准备会议室的步

骤,那么我直接找A帮忙预约时间打电话就好,也就不需要助理当中间人了.

定义:

为子系统中的一组接口提供一个一致的界面,Facade(外观)模式定义了一个高层接口,这个接口使得这一子系统

更加容易使用。

角色:

Facade: 定义子系统的多个模块对外的高层接口,通常需要调用内部多个模块,从而把客户的请求代理给适当的子系

统对象

package com.kris.study;

public class Facade {

private Facade(){}

public static void kaiHui(){

new FreshManA().time();

new FreshManB().getReady();

new FreshManC().start();

new FreshManD().summary();

}

}

子系统模块:接受Facade对象的委派,真正实现功能,各个模块之间可能有交互。Facade知道各个模块,但是

各个模块不一定知道Facade对象。比如实习生只知道助理叫什么,但是不知道她的名字和所负责的工作。

package com.kris.study;

public class FreshManA {

public void time(){

System.out.println("预约时间");

}

}

package com.kris.study;

public class FreshManB {

public void getReady(){

System.out.println("准备会议室");

}

}

package com.kris.study;

public class FreshManC {

public void start(){

System.out.println("举行会议");

}

}

package com.kris.study;

public class FreshManD {

public void summary(){

System.out.println("总结");

}

}

Client客户端:可以直接和Facade交互也可以单独调用子模块功能

package com.kris.study;

public class Client {

public static void main(String[] args) {

Facade.kaiHui();

// new FreshManA().time();

}

}

原理分析:

外观模式的目的不是给子系统增加新的功能接口,而是为了让外部减少与子系统内部多个模块的直接交互,松散耦

合,从而让外部能够简单的使用子系统,并且防止重复调用相同的代码.所以Facade的方法本身不进行功能的处理,只是

实现一个功能的组合调用。

外观模式的本质是:封装交互,简化调用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: