Java设计模式-外观模式

外观模式提供了一个统一的接口,用于与多个独立子系统交互,降低了客户端的复杂性。在代码示例中,通过创建一个外观类来封装子系统的不同方法,客户端只需与外观类交互。这种模式类似于基金投资与股票交易的关系,降低了对接多个子系统的成本,提高了代码的可维护性。
摘要由CSDN通过智能技术生成

外观模式

1.外观模式含义

外观模式是为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

外观模式的含义看起来晦涩难懂,但其实类比一下就比较好理解了。假设现在我们需要买股票,那么我们就需要自己去了解股票的相关知识,自己研究哪些股票好一点,哪些股票不太行。这样对我们来说消耗巨大,成本极高。但是如果我们换个法子改去买基金,那么我们只需要知道这一个基金的盈亏情况即可,至于这些基金要去买哪些股票,买股票要注意哪些事情,这些复杂的事情都不需要我们自己操心,基金经理就帮我们都解决了这些事情。

在这个例子中,股票就是每一个独立的子系统,基金经理就是外观类,外观类将子系统统一封装,对外提供服务,客户端只需要对接外观类一个服务即可,而不再需要自己去对接每一个独立的子系统。

2.代码示例

2.1子系统1代码

public class SubSystemOne {
    public void methodOne(){
        System.out.println("子系统方法1");
    }
}

2.2子系统2代码

public class SubSystemTwo {
    public void methodTwo(){
        System.out.println("子系统方法2");
    }
}

2.3子系统3代码

public class SubSystemThree {
    public void methodThree(){
        System.out.println("子系统方法3");
    }
}

2.4外观类代码

public class Facade {
    private SubSystemOne subSystemOne;
    private SubSystemTwo subSystemTwo;
    private SubSystemThree subSystemThree;

    public Facade() {
        subSystemOne = new SubSystemOne();
        subSystemTwo = new SubSystemTwo();
        subSystemThree = new SubSystemThree();
    }

    public void methodA(){
        System.out.println("方法组A()---------------");
        subSystemOne.methodOne();
        subSystemTwo.methodTwo();
    }

    public void methodB(){
        System.out.println("方法组B()------------------");
        subSystemThree.methodThree();
    }
}

2.5测试类

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

运行结果

方法组B()------------------
子系统方法3

3.外观模式UML类图

在这里插入图片描述

4.总结

外观模式还是比较好理解的,它就是为很多个独立的子系统提供一个统一对外的外观门面,免去了客户端与各对子系统对接的麻烦,改为与外观门面统一对接,简化了对接逻辑,降低了代码的维护成本。

其实外观模式的原理和nginx的工作原理有点类似,都是有一个统一的对外门面,客户端只需要与门面对接,门面接收到请求后,转发给相应的子系统进行请求处理。

外观模式跟简单工厂模式或者工厂模式不一样哦,这里不要搞混了。简单工厂模式或工厂模式针对的子类都是有共同的父类接口的,各个子类由统一的父类继承演化而来。而外观模式封装的各个子类,他们之间是没有什么关系的,都是相互独立的系统,这点需要特别注意一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的小幸运呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值