java 23种常用设计模式之外观模式(Facade)
来源:互联网 发布:苹果6有信号没网络 编辑:程序博客网 时间:2024/06/05 17:33
在软件开发系统中,client程序经常要与复杂系统的内部子系统之间产生耦合,而导致client程序随着子系统的变化而变化。那么问题来了!如何简化client程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?
外观模式为子系统中的一组接口提供一个统一的高层接口,解决类与类之间的依赖关系。这一接口使得子系统更加容易使用,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度,该模式中没有涉及到接口,这里我就不编故事了,直接来看一个最经典的例子,计算机的启动过程。
没有故事写不下去了,还是来个小故事娱乐一下这个类图吧!
有天有个老黑(User),觉得很无聊,于是打算自己组装个Computer,费了九牛二虎之力,在我cover机箱(facade)之前能不能先试试这个computer能不能打开呢?
于是他先后startup了CPU、Memory、Disk……成功街上显示屏玩了会植物大战僵尸,这样一块一块的这是玩的不爽,就逐个shutdown。还是用Facade先cover成一个完整的Computer,这样老黑就不需要这么麻烦了,直接startup Computer就直接帮老黑把CPU、Memory、Disk……这些启动了!要关机(shutdown)就直接把CPU之类的shutdown了!CPU、Memory、Disk这些类相对独立,在computer类中进行配置,高效的解决类与类之间的依赖关系。
详细代码如下:
package com.freedom.facade;public class CPU {public void startup(){System.out.println("CPU start");}public void shutdown(){System.out.println("CPU shutdown");}}package com.freedom.facade;public class Memory { public void startup(){ System.out.println("menory start"); } public void shutdown(){ System.out.println("menory shutdown"); }}package com.freedom.facade;public class Disk { public void startup(){ System.out.println("disk start"); } public void shutdown(){ System.out.println("disk shutdown"); }}package com.freedom.facade;public class Computer { private CPU cpu; private Memory memory; private Disk disk; public Computer(){ cpu = new CPU(); memory = new Memory(); disk = new Disk(); } public void startup(){ System.out.println("computer start"); cpu.startup(); memory.startup(); disk.startup(); } public void shutdown(){ System.out.println("computer shutdown"); cpu.shutdown(); memory.shutdown(); disk.shutdown(); }}package com.freedom.facade;public class User { public static void main(String[] args) { Computer computer = new Computer(); computer.startup(); computer.shutdown(); }}/*运行结果:computer startCPU startmenory startdisk startcomputer shutdownCPU shutdownmenory shutdowndisk shutdown*/
如果没有Computer类,那么,CPU、Memory、Disk他们之间将会相互持有实例,产生关系,这样会造成严重的依赖,修改一个类,可能会带来其他类的修改,这是很多人不想要看到的,有了Computer类,他们之间的关系被放在了Computer类里,这样就起到了解耦的作用!
小结:从客户程序的角度来看,Facade模式不仅简化了整个组件系统的接口,同时对于组件内部与外部客户程序来说,从某种程度上也达到了一种“解耦”的效果----内部子系统的任何变化不会影响到Facade接口的变化。
Facade设计模式更注重从架构的层次去看整个系统,而不是单个类的层次。Facdae很多时候更是一种架构设计模式。
注意区分Facade模式、Adapter模式、Bridge模式与Decorator模式:
Facade模式注重简化接口,Adapter模式注重转换接口,Bridge模式注重分离接口(抽象)与其实现,Decorator模式注重稳定接口的前提下为对象扩展功能。
下载源码:http://download.csdn.net/detail/github_22022001/8328447
- java 23种常用设计模式之外观模式(Facade)
- 23种设计模式之外观模式(Facade)
- java设计模式之外观模式Facade
- JAVA设计模式之外观(Facade)模式
- java设计模式之外观模式Facade
- Java设计设计模式之外观模式(Facade)
- Java开发中的23种设计模式之九:外观模式(Facade)
- 23设计模式之外观模式(Facade)
- 23设计模式之外观模式(Facade)
- 设计模式之外观(Facade)模式
- 设计模式之外观模式(Facade)
- 【设计模式】之外观模式(Facade)
- 设计模式之外观模式(Facade)
- 设计模式之外观模式(Facade)
- 设计模式之外观(Facade)模式
- 设计模式之外观模式(Facade)
- 设计模式之外观模式(Facade)
- 设计模式之(Facade)外观模式
- 在一个form表单中分别提交到不同action是怎么样提交的
- 2015年
- MYSQL中的普通索引,主健,唯一,全文索引区别
- 教你如何做好微信营销说到微信营销
- DroidWorks- 在ActionBar中嵌入TabBar
- java 23种常用设计模式之外观模式(Facade)
- gsoap使用心得! (win32)
- Expresss 路由
- Android——手机sd卡的大小查看
- onclick="return XX()"解析
- hdfs mount为linux本地文件系统
- Android笔记----Android的数据存储和IO操作
- Android——查询通话记录和删除记录
- 软件测试基础视频