元旦第三天,出去聚了聚,时间有点晚了。。。
更一个简单的吧 门面模式。
代码很简单,一次性上了:
package InvolvedMode.facade; /** * FacadeTest : 门面模式 * @author xuejupo [email protected] * create in 2015-12-29 下午6:39:02 */ public class FacadeTest { /** * main: * @param args * void 返回类型 */ public static void main(String[] args) { // TODO Auto-generated method stub //创建一个门面 Facade face = new Facade(); //门面执行相应方法 face.hasVacant(); face.identifyCert(); face.reservation(); } } /** * SubSystem1:子系统1,查询是否有空房 * @author xuejupo [email protected] * create in 2015-12-29 下午6:43:53 * */ class SubSystem1{ public void HasVacant(){ System.out.println("查询是否有空房"); } } /** * SubSystem2: 子系统2,身份证验证系统 * @author xuejupo [email protected] * create in 2015-12-29 下午6:42:14 * */ class SubSystem2{ public void identifyCert(){ System.out.println("验证身份证"); } } /** * SubSystem3:子系统3,订房间子系统 * @author xuejupo [email protected] * create in 2015-12-29 下午6:46:10 * */ class SubSystem3{ public void reservation(){ System.out.println("定一个房间"); } } /** * Facade: 门面类,负责客户端和各个子系统之间的交互 * @author xuejupo [email protected] * create in 2015-12-29 下午6:47:07 * */ class Facade{ SubSystem3 subSystem3 = new SubSystem3(); SubSystem2 subSystem2 = new SubSystem2(); SubSystem1 subSystem1 = new SubSystem1(); /** * HasVacant: 调用子系统1的方法,查询是否有空房 * void 返回类型 */ public void hasVacant(){ System.out.println("查询是否有空房"); } /** * identifyCert: 调用子系统2的方法,验证身份证 * void 返回类型 */ public void identifyCert(){ System.out.println("验证身份证"); } /** * reservation: 调用子系统3的方法,定房间 * void 返回类型 */ public void reservation(){ this.subSystem3.reservation(); } }
学了这么久设计模式,给我最大的感觉就是设计模式在教我怎么面向对象编程。。 所有的设计模式都可以跟现实的场景对应上。个人感觉,设计模式最大的两个作用,一个是让代码更容易理解,尽量跟现实环境搭上点边,这样以后看你代码的人更容易理解代码,这是为了以后维护方便,二一个,也是最重要的特点就是解耦。大部分设计模式都有这个目的,包括今天这个。解耦最终目的也是为了代码维护起来方便。。
个人感想: 门面模式很容易理解,门面模式就像是我们众多子系统中的一个对外的“代理”,更像是一个我们子系统的一个接待员。门面模式和代理模式的侧重点不同,代理模式侧重于权限控制,或者对可能易扩展的接口进行封装。比如上网代理。。 门面模式侧重于对子系统的功能封装,就像一个接待员一样,对复杂的功能进行封装,给客户端提供一个可自动化的,简单的接口。
比如说医院系统,如果侧重于给患者提供标准服务,就像是提供一个前台接待一样,那就用代理。如果侧重于权限控制,比如给依据患者身份提供特殊服务,那就用代理模式。当然也可以两者兼顾。