JavaScript -- 设计模式 结构性设计模式-外观模式

朴灿烈づ我的快乐病毒、 2022-10-03 00:33 271阅读 0赞

外观模式:指提供一个统一的接口去访问多个子系统的多个不同的接口,为子系统中的一组接口提供统一的高层接口。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d1c3RfY3ls_size_16_color_FFFFFF_t_70

其中Facade就一个提供统一接口的高层接口。上层用户不用考虑差异,只需要请求Facade接口,Facade会帮助你解决。

实际生活中,餐厅服务员就是一个Facade接口,无论你点餐,问什么时候上餐,洗手间在哪,还是结账都是通过和服务员打交道的。

外观模式的类图

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d1c3RfY3ls_size_16_color_FFFFFF_t_70 1

代码如下

  1. class Facade {
  2. constructor(a, b, c) {
  3. this.a = a;
  4. this.b = b;
  5. this.c = c;
  6. }
  7. funA() {
  8. this.a.funA();
  9. }
  10. funB() {
  11. this.b.funB();
  12. }
  13. funC() {
  14. this.c.funC();
  15. }
  16. }
  17. class SystemA {
  18. funA() {
  19. console.log("SystemA 工作")
  20. }
  21. }
  22. class SystemB {
  23. funB() {
  24. console.log("SystemB 工作")
  25. }
  26. }
  27. class SystemC {
  28. funC() {
  29. console.log("SystemC 工作")
  30. }
  31. }
  32. const a = new SystemA();
  33. const b = new SystemB();
  34. const c = new SystemC();
  35. const fa = new Facade(a, b, c);
  36. fa.funA();
  37. fa.funB();
  38. fa.funC();

2019062214555894.png

在前端开发过程中,如何使用外观模式?

  1. const addEvent = function (el, ev, fn) {
  2. if (el.addEventListener) {
  3. el.addEventListener(ev, fn, false);
  4. } else if (el.attachEvent) {
  5. el.attachEvent('on' + ev, fn);
  6. } else {
  7. el['on' + ev] = fn;
  8. }
  9. };

这是一个通过外观模式来实现跨浏览器的方法。

  1. app.use = function (path, handle) {
  2. if (typeof handle !== "function") { //表明没有写路径 path
  3. handle = path;
  4. path = "/";
  5. }
  6. routers.push({
  7. method: "middle", path, handle
  8. })
  9. }

在express框架中,use可以不写path,那么此时就只有一个参数,我们就需要对这种情况进行处理。

外观模式在JS部分更多的是做兼容处理。

发表评论

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

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

相关阅读

    相关 设计模式结构性模式

    1 简介 在前面的博客中,自己分别为GOF23总结了设计模式之创建者模式和行为型模式,借着刚阅读完Java设计模式及实践,对辛格的阐述进行总结,期待可以增进对设计模式的理