设计模式之外观模式(Facade)

来源:互联网 发布:数据流量怎么打开不了 编辑:程序博客网 时间:2024/05/01 03:58
意图:
为子系统中的一组接口提供一个一致的界面,facade模式定义了一个高层接口,这个接口使得这一个系统更加容易使用.

适用性:
1.当你要为一个复杂子系统提供一个简单的接口时.
2.客户程序与抽象类的实现部分之间存在着很大的依赖性.
3.当你需要构建一个层次结构的子系统时,使用facade模式定义子系统中的每层的入口点.

效果:

1.它对客户屏蔽子系统组件,因而减少了客户处理的对象的数目并且使得子系统使用起来更加方便.
2.它实现了子系统与客户端之间的松耦合关系,而子系统内部的功能组件往往是紧耦合的.
3.如果应用需要,它并不限制它们使用子系统类.

代码实现:

package com.git.books.b_design_patterns.j_facade;/** * @Description: 家庭门面模式:假设家庭系统中有两个复杂的操作过程:回家和离家 *               1.回家需要 打开门,关门,开灯,开热水器,洗澡,睡觉 *               2.离家需要 起床,关闭热水器,关灯,开门,关门 * @author: songqinghu * @date: 2017年3月6日 下午2:36:18 * Version:1.0 */public class HomeFacade {    private Door door;    private Light light;    private Heater heater;    private Bed bed;    public  HomeFacade(){        door = new Door();        light = new Light();        heater = new Heater();        bed = new Bed();    }    /**     * @描述:回家的门面封装  后期可能比较复杂 如周一做什么,周二什么...这些客户都后不需要去过问具体的操作一般的情况下     * @return void     * @createTime:2017年3月6日     * @author: songqinghu     */    public void goHome(){        door.openDoor();        door.closeDoor();        light.openLight();        heater.openHeater();        heater.bathe();        bed.sleep();    }    public void leaveHome(){        bed.getUp();        heater.closeHeater();        light.closeLight();        door.openDoor();        door.closeDoor();    }}

package com.git.books.b_design_patterns.j_facade;/** * @Description: 门 * @author: songqinghu * @date: 2017年3月6日 下午2:43:20 * Version:1.0 */public class Door {    //开门    public void openDoor(){        System.out.println("the door is open!");    }   //关门    public void closeDoor(){        System.out.println("the door is close!");    }}

package com.git.books.b_design_patterns.j_facade;public class Light {    //开灯    public void openLight(){        System.out.println("the light is open!");    }    //关灯    public void closeLight(){        System.out.println("the light is close!");    }}

package com.git.books.b_design_patterns.j_facade;public class Heater {    //打开热水器    public void openHeater(){        System.out.println("the Heater is open!");    }    //洗澡    public void bathe(){        System.out.println("You are taking a bath!");    }    //关闭热水器    public void closeHeater(){        System.out.println("the Heater is close!");    }}

package com.git.books.b_design_patterns.j_facade;public class Bed {    //睡觉    public void sleep(){        System.out.println("You fell asleep!");    }    //起床    public void getUp(){        System.out.println("You got up !");    }}

package com.git.books.b_design_patterns.j_facade;/** * @Description: 门面模式测试类 * @author: songqinghu * @date: 2017年3月6日 下午2:51:52 * Version:1.0 */public class FacadeClient {   public static void main(String[] args) {       HomeFacade facade = new HomeFacade();       facade.leaveHome();       System.out.println("=======================");       facade.goHome();   }}

结构图:


重点:
这个模式和builder模式有些相似,相互区分,比较,理解.

参考:
<设计模式>>
<<Java与模式>>


0 0
原创粉丝点击