设计模式---外观模式

谁践踏了优雅 2022-05-15 06:09 393阅读 0赞

简介

Facade模式也叫外观模式,是由GoF提出的23种设计模式种的一种

Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面被称作facade

类比理解:电影发行公司,他去跟影院谈影片排片时,他会说自己能拍出哪些类型的电影,希望这几部电影排片率高一些,那么影院真正找电影发行公司要电影发行时,电影发行公司提供电影,但是他的电影都是从那些导演那边拿过来给影院放映的。这个小模型中,电影发行公司其实就是导演或者说众多电影的门面,各大影院需要放映找发行公司就可以,而不是一个一个找导演。

再简单一点理解,他就是一类功能的包工头。

结构图

这里写图片描述

角色和职责

  • Facade:为调用方定义简单的调用接口
  • Clients:调用者。通过Facade接口调用该提供某些功能的内部类群
  • Packages:功能提供者。指提供功能的类群。

实现

这里写图片描述

功能1

  1. package com.mym.designmodel.facade;
  2. /**
  3. * 职责:Packages:功能提供者。指提供功能的类群。
  4. * 这里是修电灯工人
  5. */
  6. public class RepairLight {
  7. public void repair(){
  8. System.out.println("修电灯!");
  9. }
  10. }

功能2

  1. package com.mym.designmodel.facade;
  2. /**
  3. * 职责:Packages:功能提供者。指提供功能的类群。
  4. * 这里是修水龙头工人
  5. */
  6. public class RepairWater {
  7. public void repair(){
  8. System.out.println("修水龙头!");
  9. }
  10. }

外观

  1. package com.mym.designmodel.facade;
  2. /**
  3. * 职责:Facade:为调用方定义简单的调用接口
  4. */
  5. public class Facade {
  6. private RepairWater repairWater = new RepairWater();
  7. private RepairLight repairLight = new RepairLight();
  8. public void repairWater(){
  9. repairWater.repair();
  10. }
  11. public void repairLight(){
  12. repairLight.repair();
  13. }
  14. public void repairWaterAndLight(){
  15. repairWater.repair();
  16. repairLight.repair();
  17. }
  18. }

客户端clients

  1. package com.mym.designmodel.facade;
  2. /**
  3. * 职责: Clients:调用者。通过Facade接口调用该提供某些功能的内部类群
  4. */
  5. public class MainClass {
  6. public static void main(String[] args) {
  7. Facade facade = new Facade();
  8. //家里水龙头坏了,让它修水龙头
  9. facade.repairWater();
  10. System.out.println("-----------------");
  11. //家里电灯坏了,让它修电灯
  12. facade.repairLight();
  13. System.out.println("-----------------");
  14. //电灯和水龙头都坏了,两个一起修
  15. facade.repairWaterAndLight();
  16. System.out.println("-----------------");
  17. }
  18. }

执行:

  1. 修水龙头!
  2. -----------------
  3. 修电灯!
  4. -----------------
  5. 修水龙头!
  6. 修电灯!
  7. -----------------

外观模式与策略模式对比与选用

  • 外观模式让客户端只需要调用方法满足需求。关注的是对外接口外观包装,便捷客户端。他优点在于包装已知功能的对外接口,而缺点就是一旦有新的类似功能就需要改写外观。
  • 策略模式使用时,客户端需要知道有哪些算法策略,才能调用。他的关注点在于策略的快速扩展。

选用时应根据扩展能力与便捷性以及客户端的使用便捷来选取

发表评论

表情:
评论列表 (有 0 条评论,393人围观)

还没有评论,来说两句吧...

相关阅读

    相关 设计模式 - 外观模式

    设计模式 - 外观模式 场景 小张搬家了,新的房间都是智能化,但是每个设备都是独立的,小张每次回家之前需要打开app分别打开每个设备,例如小张回家后的基本操作是开门

    相关 设计模式 - 外观模式

    定义:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个子系统更加容易使用。 通过将子系统中一系列的接口进行组合形成一个更高层的接口,这样客户

    相关 设计模式——外观模式

    本文主要是讲述结构型模式中一个比较常用的模式-外观模式,这个模式呢,有个最大的特点将细粒度的对象包装成粗粒度的对象,应用程序通过 访问这个外观对象,来完成细粒度对象的调用,外