设计模式之门面模式

一:门面模式的使用场景

  • 为一个复杂的模块或子系统提供一个供外界访问的接口。
  • 子系统相对独立----外界对子系统的访问只要黑箱操作即可。
  • 预防低水平人员带来的风险扩散。

本质就是提供一个给外部调用的API门面,让用户不用关注里面的实现逻辑,只需要调用对应的接口即可实现对应的功能。

门面模式在开源框架中用的很多,如mybatis中的会话层接口就是用的门面模式,kafka中调用接口层也是用的门面模式。

二:代码实现

ClassA实体类:
package facade;

/**
 * @author lizhangyu
 * @date 2021/5/2 14:47
 */
public class ClassA {

    public ClassA() {
    }

    public void doSomeThingA() {
        //业务逻辑
        System.out.println("A");
    }
}
ClassB实体类:
package facade;

/**
 * @author lizhangyu
 * @date 2021/5/2 14:47
 */
public class ClassB {

    public ClassB() {
    }

    public void doSomeThingB() {
        //业务逻辑
        System.out.println("B");
    }
}
ClassC实体类:
package facade;

/**
 * @author lizhangyu
 * @date 2021/5/2 14:47
 */
public class ClassC {

    public ClassC() {
    }

    public void doSomeThingC() {
        //业务逻辑
        System.out.println("C");
    }
}
Facade实体类:
package facade;

/**
 * @author lizhangyu
 * @date 2021/5/2 14:50
 */
public class Facade {

    /**
     * 被委托的对象
     */
    private ClassA a = new ClassA();
    private ClassB b = new ClassB();
    private ClassC c = new ClassC();

    /**
     * 提供给外部访问的方法
     */
    public void methodA() {
        this.a.doSomeThingA();
    }

    public void methodB() {
        this.b.doSomeThingB();
    }

    public void methodC() {
        this.c.doSomeThingC();
    }

}
Client实体类:
package facade;

/**
 * @author lizhangyu
 * @date 2021/5/2 14:55
 */
public class Client {

    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.methodA();
        facade.methodB();
        facade.methodC();
    }
}

运行结果:

A
B
C

Process finished with exit code 0

三:门面模式的优点和缺点

1:优点

  • 减少了系统的相互依赖
  • 提高了灵活性
  • 提高安全性

2:缺点

对扩展开发,对修改关闭,如果系统投产后有一个小bug,外部系统调用发现之后无法解决,只能等对应系统的开发修改对应的代码,这个风险很大,所以在设计的时候要仔细思考。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值