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/38852899

23种设计模式pdf

0 0
原创粉丝点击