关于设计模式:抽丝剥茧调停者和门面设计模式

25次阅读

共计 1210 个字符,预计需要花费 4 分钟才能阅读完成。

调停者和门面设计模式

明天咱们来聊两个设计模式:调停者设计模式和门面设计模式,为什么要将他们放在一起解说,因为他们两个东东太像了,仅仅是因为作用的中央不同而产生的不同的叫法。

咱们用一个对于咱们 90 后最难的一个问题来动手吧。假如咱们厌倦了城市生存,想要找一个宁静的中央安家,养猪,顺便写一个猪脸辨认来分类管理这些猪(幻想中的生存)。而在做这些事件的前提,咱们必须建造一个房子和一个猪圈。

咱们来看一下咱们以前会怎么做。

盖房子须要工人,砖头,水泥等等,咱们须要一个一个分割所须要的人。但我这么聪慧当然不会这么干了,所以我找了一个人来帮我实现这些事件,于是就成为了这样的流程。

我找了一个包工头,代理商帮我去实现这些事件。这个流程就是一个残缺的门面模式。是不是感觉和代理模式有点像,帮我做事件。其实吧设计模式到最初就必由之路了,正所谓,太极剑法,学多少忘多少,最初记得的只是太极剑。

咱们回到编程畛域,咱们来看一下门面模式具体的类图实现

那接下来咱们来看一下调停者设计模式。

它和门面模式最大的区别就是门面模式是挡在外层的,而它是在所有服务两头的。咱们来看一下它的原理图。

咱们再来看一下它的类图实现

发现了没,两个模式的类图实现简直雷同,所以他们的代码实现也简直雷同。

理解了他们的原理当前,咱们来聊聊他们在理论代码中的利用。

门面模式:服务器部署时的网关,将所有的申请拦挡,具体的办法转发由网关决定

调停者模式:协调中间件,微服务中将所有的服务注册到相似于 zookeeper 的协调中间件中,通过中间件拜访其余服务;消息中间件,须要什么音讯通过消息中间件进行获取。

对于一些比拟老的我的项目,门面模式和调停者模式的调度核心很有可能是一个,如通过 Nginx 治理服务。

咱们来看一下具体的代码实现吧。

门面模式代码实现(角色组成)

  • 子系统
 ​
 class Cement{void cement(){System.out.println("水泥");
  }
 }
 ​
 class Worker{void worker(){System.out.println("工人");
  }
 }
 ​
 class Brick{void brick(){System.out.println("砖头");
  }
 }
  • 门面
 class Contractor{private Cement cement = new Cement();
  private Worker worker = new Worker();
  private Brick brick = new Brick();
 ​
  void cement(){cement.cement();
  }
 ​
  void worker(){worker.worker();
  }
 ​
  void brick(){brick.brick();
  }
 }

调停者模式的代码实现和门面模式简直雷同。两者只是因为应答与不同的地位而诞生,实质雷同。

更多原创文章请关注公众号 @MakerStack

正文完
 0