前端设计模式应用--外观模式

108 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天

介绍

  • 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

  • 外观模式(Facade),亦称“过程模式”。学校课程评价模式之一。美国教育学者斯泰克1967 年在所著《教育评价的外观》中提出。主张按照描述和判断资料来评价课程,关键的活动是在课程实施的全过程中进行观察和搜集意见,以了解人们对课程的不同看法。这种模式不限于检查教学的成果,重视描述和判断教学过程中各种复杂、动态的现象和事物。

使用场景

  • 为复杂的模块或子系统提供外界访问的模块。

  • 子系统相对独立。

  • 预防低水平人员带来的风险。

应用实践

职责明确

  • 外观:提供了一种访问特定子类系统功能的便捷方法,其了解如何重定向客户端请求,知晓如何操作一切活动部件
  • 创建附加外观:类可以避免多种不相关的功能,污染单一外观,使其变成有一个复杂结构,客户端和其他外观都可以使用附加外观
  • 复杂子系统:由数十个不同的对象构造。如果要用这些对象完成有意义的工作,你必须深入了解子系统的实现细节,比如按照正确顺序初始化对象和为其提供正确的格式数据
  • 客户端:使用外观代替对子系统的直接调用

实现

/* 子模块子系统*/

class CPU {
 public void freeze() { ... }
 public void jump(long position) { ... }
 public void execute() { ... }
}

class Memory {
 public void load() {
  ...
 }
}

class HardDrive {
 public byte[] read() {
  ...
 }
}

/* 整体对接系统 */
class Computer {
 public void startComputer() {
  cpu.freeze();
  memory.load();
  cpu.jump();
  cpu.execute();
 }
}

/* 应用中心 */

class You {
 public static void main(String[] args) {
  Computer facade = new Computer();
  facade.startComputer();
 }
}

汇总

优点特性

  1. 降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类

  2. 对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易

  3. 降低了大型软件系统中的编译依赖性,简化了系统在不同平台之间的移植过程,因为编译一个子系统不会影响其他的子系统,也不会影响外观对象

  4. 只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类。

缺点弊端

  1. 不能很好地限制客户使用子系统类,很容易带来未知风险
  2. 增加新的子系统可能需要修改外观类或客户端的源代码,违背了开闭原则