23中设计模式之门面模式
来源:互联网 发布:tv域名不能备案 编辑:程序博客网 时间:2024/06/01 13:55
重点内容
1.什么是门面模式
2.门面结构类图
3.门面模式使用场景
先说门面模式属于结构型模式中设计模式,主要解决对象组成和对象之间的依赖关系。
门面模式:外部与子系统进行通信必须通过一个统一的门面(Facade)对象进行,这就是门面模式。
2.门面模式结构:
很直观,想和子系统内部模块A,B,C.通信必须通过Facade对象来建立联系
eg:例子
package Facade;//挂号、门诊、划价、化验、收费、取药public interface Hospital { void Guahao(); void menzhen(); void huajia(); void huayan(); void shoufei(); void quyao();}
实现类
package Facade;/** * 实现类 * * @author weichyang * */public class ImlHospital implements Hospital { @Override public void Guahao() { System.out.println("去挂号!"); } @Override public void menzhen() { System.out.println("去门诊!"); } @Override public void huajia() { System.out.println("去划价!"); } @Override public void huayan() { System.out.println("去化验!"); } @Override public void shoufei() { System.out.println("去挂号!"); } @Override public void quyao() { System.out.println("去取药!\n"); System.out.println("-----------------流程结束-------------"); }}
客户端
package Facade;/* * 病人取药 */public class Client { /** * @param args * //挂号、门诊、划价、化验、收费、取药 */ public static void main(String[] args) { Hospital hospital = new ImlHospital(); hospital.Guahao(); hospital.menzhen(); hospital.huajia(); hospital.huayan(); hospital.shoufei(); hospital.quyao(); }}
Ok 这是进行会这样做的。这样写有什么问题。代码高度耦合在一起。Client 必须知道整个流程,缺少一环就取不到要。那么怎么优化呢,引入门面模式。修改下类图,增加一个Facade类作为两者中间的委托对象。
增加一个facade。然后对整个过程进行封装。在不改变其他类同时,完成了扩展。
package Facade;/** * 暂且称为接待员 * * @author weichyang * */public class FacadeOb { private ImlHospital hospital = new ImlHospital(); /** * 患者看病 */ public void kanbing() { hospital.Guahao(); hospital.menzhen(); hospital.huajia(); hospital.huayan(); hospital.shoufei(); hospital.quyao(); }}
看Client类是不是很简单
package Facade;/* * 病人取药 */public class Client { /** * @param args * //挂号、门诊、划价、化验、收费、取药 */ public static void main(String[] args) { // Hospital hospital = new ImlHospital(); // hospital.Guahao(); // hospital.menzhen(); // hospital.huajia(); // hospital.huayan(); // hospital.shoufei(); // hospital.quyao(); FacadeOb fOb = new FacadeOb(); fOb.kanbing(); }}
好了。这就是门面模式简版。扩展性,维护成本都减少很多,想深入理解。可以看看okhttp 源码。
门面模式
http://blog.csdn.net/zhonghuan1992/article/details/3885289923种设计模式pdf
0 0
- 23中设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之-门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- 设计模式之门面模式
- FrameLayout 的作用
- 正则表达式提取时间
- maven install时报错Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile
- ARC forbids Objective-C objects in struct
- 简单的自定义控件
- 23中设计模式之门面模式
- c++ 实现url的转码与解码 urlencode urldecode
- 部门团建—十渡
- android Service 之Bound Service
- publishProgress
- 5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
- 数组长度的可扩张性写法的例子
- jdbc1
- img标签等比例缩放