二、门面模式

门面模式(Facade)

模型图

 

 

 

主要思想

  调用者对象想调用A对象的doXXX()时,可能需要先调用B对像的doXxx(),其实调用者只想做一件事情,但是犹豫实际业务的复杂性,它需要持有很多对象的应用,此时就可以创建一个门面对象,将这种多对象调用封装到

门面对象中,这样,调用者对象就只持有门面对象的引用,降低了耦合

代码示例

 

/**
 * 调用者类
 */
class Caller {
    private BankFacade bankFacade;

    void getMoney(Integer price) {
        bankFacade.getMoney(price);
    }

    ;

    void saveMoney(Integer price) {

    }

    ;
}

/**
 * 门面类
 */
class BankFacade {
    //经理
    private C c;

    //柜员
    private A a;

    //保安
    private B b;

    void getMoney(Integer price) {
        //保安取号
        Integer order = b.takeOrder();
        //柜员取钱
        a.getMoney(price, order);
        //经理审核通过
        c.agree(price);
    }
}

/**
 * A 柜员
 */
class A {
    public void getMoney(Integer price, Integer order) {
        //todo
    }

    ;
}


/**
 * B 保安
 */
class B {
    //取号
    Integer takeOrder() {
        return new Random().nextInt();
    }
}

/**
 * C 经理
 */
class C {
    //审核同意
    boolean agree(Integer price) {
        return true;
    }
}

 

实际场景

这个门面模式我们经常用,我们写WEB相关后台业务代码的时候,会给前端HTTP接口,这时候前端不关心我们后台具体逻辑,例如接口要做鉴权控制,或者需要取缓存,或者需要调其他服务,参数校验等等,前端

只是输入参数,需要返回结果而已。这是广义上的门面模式,我个人理解就是接口Api层。在有些源码项目中,可以看到有些module名称可能命名xxx_facade,里面都是一些接口定义

 

优缺点

  • 业务内聚,调用者不需要被调用者细节
posted @ 2021-04-14 22:39  不屈MADAO之魂  阅读(74)  评论(0)    收藏  举报