【Java开发】设计模式 10:外观模式

1 外观模式介绍

外观模式是一种结构型设计模式,用于简化大型代码库中的复杂子系统。

它通过提供一个高层级的接口,使得客户端可以更容易地使用子系统的功能,同时也避免了直接与复杂子系统接口交互所带来的复杂性和不可维护性。在外观模式中,客户端和子系统之间的交互都通过一个外观对象进行,这个对象相当于客户端与子系统之间的中介者。

📌 场景

  1. 当一个复杂的系统有多个子系统组成时,可以使用外观模式将它们封装起来,降低耦合度,提高系统的可维护性和扩展性。

  2. 当系统需要支持多个不同的客户端访问时,可以使用不同的外观类来提供不同的接口,满足各个客户端的需求。

  3. 当系统需要逐步演化,从而变得更加复杂时,外观模式可以帮助我们逐步将复杂性隐藏起来,保证系统的稳定性和可维护性。

📌 优缺点

  • 优点:简化接口、提高灵活性、提高安全性
  • 缺点:不符合开闭原则、难以单元测试、难以单元测试

2 外观模式实现

以找各个部门办理业务为例:

📌 1.定义A部门

/**
 * A部门
 */
public class DeptA {
    /**
     * 办理业务
     */
    public void business() {
        System.out.println("A部门办理了业务");
    }
}

📌 2.定义B部门

/**
 * B部门
 */
public class DepartmentB {
    /**
     * 办理业务
     */
    public void business() {
        System.out.println("B部门办理了业务");
    }
}

📌 3.定义C部门

/**
 * C部门
 */
public class DepartmentC {
    /**
     * 办理业务
     */
    public void business() {
        System.out.println("C部门办理了业务");
    }
}

📌 4.定义外观部门

/**
 * 外观部门
 */
public class Facade {
    /**
     * A部门
     */
    private DeptA deptA;
    /**
     * B部门
     */
    private DeptB deptB;
    /**
     * C部门
     */
    private DeptC deptC;
    /**
     * 无参构造器中给包装的部门赋值
     */
    public Facade() {
        deptA = new DeptA();
        deptB = new DeptB();
        deptC = new DeptC();
    }
    /**
     * 办理业务
     */
    public void business() {
        deptA.business();
        deptB.business();
        deptC.business();
    }
}

📌 5.调用

// 找到外观部门
Facade facade = new Facade();
// 办理业务
facade.business();

控制台输出:

如此即实现了找一个部门就办理了多个部门的业务。不管多复杂的业务,麻烦的都是外观部门,而不是办理业务的人。哪个部门的业务发生变化了,外观部门去跟它们沟通协调做相应调整就行,办理业务的人不用再熟悉调整后的业务,还像往常一样找外观部门办理即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

尹煜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值