设计模式 - 门面模式(Facade Pattern,也叫外观模式)

简介

场景

  1. 将系统划分为若干个子系统有利于降低系统的复杂性,但是这会增加调用者的复杂性。通过引入 Facade 可以对调用者屏蔽系统内部子系统的细节。
  2. Java 中有多个日志库,例如 log4j、logback 等。此外,还有一个著名的日志门面库 SLF4j。需要打日志时,最佳做法是去调用 SLF4j,而不是直接调用 log4j 等具体的日志库。

电商企业

电商企业有订单部门、物流部门、结算部门。

当消费者打客服电话时,只跟客服代表通话,客服代表充当 Facade,代替客户获取相关子部门的信息。

分层的系统

对于复杂系统,分层设计可以提高灵活性和可替换性。

可以用外观模式定义系统中每一层的入口,使得层与层之间不直接产生联系,降低层之间的耦合度。

模式定义

外部与一个系统中所有子系统的通信必须通过一个统一的 Facade 对象进行,为子系统中的接口提供统一的界面,使子系统更加易用。

门面模式也叫外观模式。

模式特点

门面模式包含两个角色:

  • Facade:门面
  • SubSystem:子系统

门面模式

优点

  • 统一入口,客户端不需要了解系统细节,操作简单
  • 降低了子系统与客户之间的耦合关系,子系统内部实现变化时,不影响客户端

缺点

  • 用户可以绕过 Facade 门面类直接访问子系统,无法把控
  • 不引入抽象外观类时,增加新的子系统可能需要修改外观类或客户端,违背“开闭原则”

PHP 代码示例

<?php

class Facade {
    private $a;
    private $b;
    
    public function __construct() {
        $this->a = new SystemA();
        $this->b = new SystemB();
    }
    
    function wrapOperation() {
        $this->a->funcA();
        $this->b->funcB();
    }
}

class SystemA {
    public function funcA() {
        echo "funcA".PHP_EOL;
    }
}

class SystemB {
    public function funcB() {
        echo "funcB".PHP_EOL;
    }
}

echo '<pre>';

$facade = new Facade();
$facade->wrapOperation();

输出:

funcA
funcB
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java设计模式是一组经过实践验证的面向对象设计原则和模式,可以帮助开发人员解决常见的软件设计问题。下面是常见的23种设计模式: 1. 创建型模式(Creational Patterns): - 工厂方法模式(Factory Method Pattern) - 抽象工厂模式(Abstract Factory Pattern) - 单例模式(Singleton Pattern) - 原型模式(Prototype Pattern) - 建造者模式(Builder Pattern) 2. 结构型模式(Structural Patterns): - 适配器模式(Adapter Pattern) - 桥接模式(Bridge Pattern) - 组合模式(Composite Pattern) - 装饰器模式(Decorator Pattern) - 外观模式Facade Pattern) - 享元模式(Flyweight Pattern) - 代理模式(Proxy Pattern) 3. 行为型模式(Behavioral Patterns): - 责任链模式(Chain of Responsibility Pattern) - 命令模式(Command Pattern) - 解释器模式(Interpreter Pattern) - 迭代器模式(Iterator Pattern) - 中介者模式(Mediator Pattern) - 备忘录模式(Memento Pattern) - 观察者模式(Observer Pattern) - 状态模式(State Pattern) - 策略模式(Strategy Pattern) - 模板方法模式(Template Method Pattern) - 访问者模式(Visitor Pattern) 4. 并发型模式(Concurrency Patterns): - 保护性暂停模式(Guarded Suspension Pattern) - 生产者-消费者模式(Producer-Consumer Pattern) - 读写锁模式(Read-Write Lock Pattern) - 信号量模式(Semaphore Pattern) - 线程池模式(Thread Pool Pattern) 这些设计模式可以根据问题的特点和需求来选择使用,它们提供了一些可复用的解决方案,有助于开发高质量、可维护且易于扩展的软件系统。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值