java 23种常用设计模式之外观模式(Facade)
2015-01-05 13:48
686 查看
在软件开发系统中,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类中进行配置,高效的解决类与类之间的依赖关系。
详细代码如下:
如果没有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
外观模式为子系统中的一组接口提供一个统一的高层接口,解决类与类之间的依赖关系。这一接口使得子系统更加容易使用,像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 start CPU start menory start disk start computer shutdown CPU shutdown menory shutdown disk 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)
- java23种设计模式--外观模式(facade)
- Java开发中的23种设计模式详解----外观模式(Facade)
- JAVA设计模式十九--Facade(外观模式)
- java23种设计模式中最常用的9种
- Java设计模式之从"我想请个秘书!"分析外观(Facade)模式
- Java设计模式 结构模式-外观模式(Facade)
- java23种常用设计模式之单例模式(Singleton)
- java 23种设计模式中常用的九种
- java 23种设计模式,一般情况下,常用的有哪些? 转载
- Java经典23种设计模式之结构型模式(三)------附代理模式、适配器模式、外观模式区别
- Java 设计模式 之 facade(外观)设计模式
- java 设计模式学习笔记七 facade外观模式
- JAVA设计模式十八:--Facade(外观模式或门面模式)
- java设计模式9——外观模式(facade)
- Java23种常用设计模式
- java设计模式-外观模式(Facade)
- java设计模式之外观模式Facade
- java 23种设计模式中常用的九种
- java设计模式之外观模式Facade