设计模式:门面模式

门面模式的定义:

        外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式

门面模式优缺点?

优点:对内部复杂的调用提供统一的接口,降低系统与系统之间的耦合度。(说白了就是简化你的操作,同时不和一些功能模块关联在一起,你在自己的系统里直接调用别人的代码。)

缺点:在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”。

代码实例:

(1)接口设计图如下

 

 

 (二)简化一下

从图中我们可以看出,无论内部系统存在多么复杂的调用关系,对于客户端来说我们都不用去关心,我们只需要关心我们的门面接口给我们提供的入口即可,真正做到了:金玉其面,乱絮其中!

代码:

 

 systemA:

import lombok.Builder;

@Builder
public class SystemA {
    public Object doSthA1(Object ...obj){
        //do sth. a1
        return "a1";
    }

    public  Object doSthA2(Object ... obj){
        //do sth. a2
        return "a2";
    }
    public Object doSthA3(Object ... obj){
        // do sth. a3
        return "a3";
    }
}

systemB:

import lombok.Builder;

@Builder
public class SystemB {
    public Object doSthB1(Object ...obj){
        //to do sth. b1 system B must invoke system a
        SystemA systemA =SystemA.builder().build();
        systemA.doSthA1(obj);
        //do sth. b1 ....
        return "b1";
    }

    public  Object doSthB2(Object ... obj){
        //do sth. b2
        return "b2";
    }
    public Object doSthB3(Object ... obj){
        // do sth. b3
        return "b3";
    }
}

systemC:

import lombok.Builder;

@Builder
public class SystemC {

    public Object doSthC1(Object ...obj){
        // to do sth c2 the system C must invoke the system B
         SystemB.builder().build().doSthB1(obj);
        //do sth. c1 .....
        return "c1";
    }

    public  Object doSthC2(Object ... obj){
        //do sth. c2
        return "c2";
    }

    public Object doSthC3(Object ... obj){
        // do sth. c3
        return "c3";
    }
}

facede:
 

import lombok.Builder;

@Builder
public class Facede {
    public SystemA systemA;
    public SystemB systemB;
    public SystemC systemC;

    public Object doSthFinally(Object ... obj){
        systemA.doSthA2();
        systemB.doSthB1();
        systemC.doSthC1();
        //and so on
        return  "sth. you want return...";
    }
    //and more methods you want provide
}

client:

// this is outerside system that want to get sth. from system A B C
class TestFacede{
    public static void main(String[] args) {
        Facede.builder().build().doSthFinally();
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值