设计模式之门面模式(外观模式)

外观模式(FacadePattern)提供了一个统一的接口,使得子系统更易于使用。通过电闸控制电器的开关和股民通过基金操作股票是两种应用场景。门面模式简化了客户端代码,实现了子系统与客户的松耦合,但可能限制了灵活性。文章还提到了责任链模式、工厂模式和策略模式的相关内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.模式定义

2.应用场景     

2.1 电源总开关例子

2.2 股民炒股场景

​编辑

 3. 实例如下

4. 门面模式的优缺点

传送门:

项目中用到的责任链模式

给对象讲工厂模式,必须易懂易会

策略模式,工作中你用上了吗?


1.模式定义

《图说设计模式》

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

《设计模式之禅》:

要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。

2.应用场景     

    看到两个 很好的例子,如下:

2.1 电源总开关例子

一个电源总开关可以控制所有电器的打开或关闭状态。

无论是空调、冰箱、电视、电脑、风扇等等,只要是电器都受这个电闸控制。只要这个电闸将关闭,所有的电器都会受到牵连(一同关闭)。电源总开关(电闸)即为该系统的外观模式设计。

2.2 股民炒股场景

股民炒股需要了解股票、国债、房产情况,需要参与这些项目的具体买和卖,耦合性很高。一种解决办法就是,交给专业的机构操作,买基金。

 3. 实例如下

比如,我们家里现在有空调、冰箱、电脑这么几个电器


// 冰箱
public class Fridge {

 // 关闭冰箱
 public void turnOff() {

 }

 // 开冰箱灯..减低冰箱温度..调高冰箱温度...
}


// 电视
public class Television {


 // 关闭电视
 public void turnOffTV() {
 System.out.println("关闭电视");
 }

 // 切换电视节目..减低电视声音..调高电视声音...
 public void doSomething() {
 System.out.println("切换电视节目..减低电视声音..调高电视声音...");
 }
}

// 电脑
public class Computer {
 // 关闭电脑
 public void turnOffComputer() {
 System.out.println("关闭电脑");
 }

 // 使用电脑干别的事~
 public void doSomething() {
 System.out.println("使用电脑干别的事~");
 }

} 

如果没有电闸的的情况下,我想将上面的电器关闭掉,我需要这样干:


 // 我要关闭电视、电脑、空调
 public static void main(String[] args) {
 new Computer().turnOffComputer();
 new Fridge().turnOffFridge();
 new Television().turnOffTV();

 // 当然了,一个正常的家庭不单单只有这么点电器的。
 // 如果某一天我想关闭家里所有的电器,就需要重复new 个对象,调用其turn offer方法
 } 

一个一个关是不是很麻烦,所以我们就有了电闸:


// 电闸
public class ElectricBrake {
 private Computer computer = new Computer();
 private Fridge fridge = new Fridge();
 private Television television = new Television();

 // 关闭所有电器
 public void turnOffAll() {
        computer.turnOffComputer();
        fridge.turnOffFridge();
        television.turnOffTV();
 }
} 

当我们想关闭所有电器的时候,我们可以使用电闸来关闭。


// 我要关闭所有电器
 public static void main(String[] args) {
 ElectricBrake brake = new ElectricBrake();
        brake.turnOffAll();
 } 

有经验的同学可能就会想,这不就再封装了一层吗??这就是门面模式啦??嗯,没错,这就是门面模式

4. 门面模式的优缺点

优点:

  1. 对客户屏蔽子系统组件,减少了客户处理的对象数目并使得子系统使用起来更加容易。通过引入外观模式,客户代码将变得很简单,与之关联的对象也很少。

  2. 实现了子系统与客户之间的松耦合关系,这使得子系统的组件变化不会影响到调用它的客户类,只需要调整外观类即可。

缺点:

  1. 不能很好地限制客户使用子系统类,如果对客户访问子系统类做太多的限制则减少了可变性和灵活性。
  2. 在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”

参考:https://www.cnblogs.com/Java3y/p/10198715.html

传送门:

项目中用到的责任链模式

给对象讲工厂模式,必须易懂易会

策略模式,工作中你用上了吗?

                                                                     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

only-qi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值