设计模式之外观模式(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
- 设计模式之Facade(外观)
- 设计模式之Facade(外观)
- 设计模式之Facade (外观)
- 设计模式之Facade模式(外观模式)
- 设计模式之Facade外观模式
- 设计模式之Facade(外观)模式
- 设计模式之外观(Facade)模式
- 设计模式学习之---Facade(外观)模式
- 设计模式之Facade-外观模式
- 设计模式之八、外观模式Facade
- 设计模式之(五)外观模式Facade
- 设计模式之外观模式(Facade)
- 设计模式之外观模式(Facade Pattern)
- 设计模式之九 --- 外观(Facade)模式
- 浅学设计模式之外观<Facade>模式
- 设计模式之外观模式 facade
- 设计模式之外观模式Facade
- 【设计模式】之外观模式(Facade)
- 使用 git 命令行工具创建一个 Android 工程
- ViewPager 详解(三)---PagerTabStrip与PagerTitleStrip添加标题栏的异同
- Ajax提交与传统Form表单提交的区别说明
- java多图片上传功能的实现
- 北方大学训练赛,第一周
- 设计模式之外观模式(Facade)
- tomcat内存溢出解决办法
- hhtp 上传图片--使用MultipartEntity
- PostgreSQL之查找最慢的SQL 的方法
- C++各种调用各种报错........让我想起了一度被C++支配的恐怖
- 短信接口调用
- Wireshark网络分析实战笔记(二)显示过滤器
- [Thinking in Java]
- 使用Android Studio对Android应用打包签名