23中设计模式之门面模式

重点内容
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灯塔@kuaidao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值