设计模式之外观模式(门面模式)

1. 概念

        外观模式(Facade)又叫做门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。

2. 代码示例

        门面模式其实相对于其他设计模式来说比较简单,其实说白了就是因为其他类都要遵循单一职责原则(也就是一个类只能干一个事情),但是在开发过程中有一个需求就是需要将其他单一职责的类都要组合起来作为一个新的工作流程对外暴露,那么我们就可以使用门面模式,通过另一个类按照一定的执行顺序进行组合来完成想要的工作流。

        这里我就以一个微信自助程序为例,主要就是用户可以通过微信自助程序的一个方法,就可以完成在Police、Edu、Social类完成注册,即简化了每一个类都需要进行单独注册的麻烦。

Edu.java

public class Edu {

    public void assignSchool(String name){
        System.out.println(name+",你的孩子明天去附属幼儿园 报道......");
    }
}

Police.java

public class Police {

    public void resgister(String name){
        System.out.println(name + "已办理落户");
    }
}

Social.java

public class Social {

    public void handleSocial(String name){
        System.out.println(name+",你的社保关系已经转移....");
    }
}

WeiXinFacade.java (门面模式主要展现类)

public class WeiXinFacade {

    Police police = new Police();
    Edu edu = new Edu();
    Social social = new Social();


    /**
     * 封装起来只留一个方法
     * @param name
     */
    public void handleXxx(String name){
        police.resgister(name);
        edu.assignSchool(name);
        social.handleSocial(name);
    }
}

MainTest.java

public class MainTest {

    public static void main(String[] args) {

//        非门面模式的写法
//        Police police = new Police();
//        police.resgister("张三");
//
//        Edu edu = new Edu();
//        edu.assignSchool("张三");
//
//        Social social = new Social();
//        social.handleSocial("张三");

//        门面模式的写法
        WeiXinFacade facade = new WeiXinFacade();

        facade.handleXxx("张三");
    }
}

        这里我们能看到,使用门面模式大大简化了外部系统在调用的过程,只需要调用门面模式提供类所提供的统一方法,直接就可以完成整体的流程,在保证其他类的单一职责原则时同时也实现了新的业务逻辑的需求。

3. 应用场景

  • JAVA 的三层开发模式。
  • 分布式系统的网关 Tomcat源码中的RequestFacad
  • ......
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值