门面模式

  门面模式(Facade Pattern)也叫做外观模式,是一种比较常用的封装模式。其定义如下:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。笔者在学习门面模式有一种惊叹,这个模式不是自己日常开发中经常用的么?原来这也是一种设计模式呀!看来我们在默默搬砖的时候,人家早就把它提炼总结成为一个设计模式了。来看一下我们日常用的Controller。我们有三个Service类:

  

public class ServiceA {

    public void dosomething(){
        System.out.println("执行任务A");
    }
}
public class ServiceB {
    public void dosomething(){
        System.out.println("执行任务B");
    }
}
public class ServiceC {
    public void dosomething(){
        System.out.println("执行任务C");
    }
}

有一个提供统一访问的门面Controller:

  

复制代码
public class FacadeController {

    private ServiceA serviceA = new ServiceA();
    private ServiceB serviceB = new ServiceB();
    private ServiceC serviceC = new ServiceC();


    public void methodA(){
        serviceA.dosomething();
    }

    public void methodB(){
        serviceB.dosomething();
    }

    public void methodC(){
        serviceC.dosomething();
    }
}
复制代码

  小伙伴们是不是有了似曾相识的感觉!门面模式就是这么简单,大家都是这么用的~

  门面模式有什么优缺点呢?我们一起来总结一下吧!

  优点:

  1、减少系统的依赖:想想看,如果我们不使用门面模式,外界可以直接访问到子系统内部,相互之间是一种强耦合关系,这样的强依赖是系统设计所不能接受的,门面模式的出现就很好的解决了这个问题,所有的依赖都是依赖门面的,与子系统无关。

  2、提高了系统的灵活性:依赖减少了,灵活度自然高了,只要不影响门面对象,子系统的变化任由你变化。

  3、提高了系统的安全性:你想访问子系统的哪些业务就开通哪些业务,不在门面上开通的方法,你也休想访问到。

  4、遵守迪米特法则。

  缺点:

  1、不符合开闭原则:增加子系统和扩展子系统行为时或者修改门面对象,可能会带来未知的风险。

  2、容易违背单一职责原则:当门面对象设计的过于冗余的时候,很肯能导致门面的对象职责不再单一。

  值得一提的是,门面模式也很像是一种静态代理,门面对象将子系统的行为进行代理,但是门面模式更强调的是封装,而代理模式强调的是功能的增强。

 

posted @   梦里藏梦、  阅读(107)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示