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

发布时间:2022-03-01 11:38:30 作者:yexindonglai@163.com 阅读(964)

    

为什么需要外观模式?

    先举个例子,就拿我自己来讲,当程序员多年了,攒了一些小钱,现在年过35,被市场淘汰了,于是呢,衣锦还乡,回到老家想盖一座房子,如果让我自己来盖,是不是就很费事,我得去买造房子需要的材料,钢筋、混凝土、还得请工人,

如果这些事情如果都是我来做的话,这实在是太麻烦了,有没有人能够帮我做这件事呢?就是有一个人帮我把上面的事情都做了,这样我就省心了;那么这时候我就可以找个包工头,付钱给他就好了,他会直接帮我把房子建好,我只要坐着看电视等他建好就行了!

外观模式的概念

    其实非常好理解,在程序的层面,就是做了一层封装,基于面向对象的封装概念,我把底层的功能都实现好了,你只需要调用我就好了;也可以理解为是引入了一个中介,这个中介可以帮你做完需要做的事情,而包工头就是这个中介;

类图

优点

  1. 可以屏蔽子系统,提高子系统的独立性;
  2. 使用简单,用户不需要了解子系统的实现逻辑;
  3. 简化依赖关系

 

缺点

  1. 不规范的编程方式,
  2. 没有抽象编程的概念,只是通过中间层调用,转换服务方的接口;

 

使用场景

  1.   重构,简化复杂的系统代码
  2.   控制了入口,可以进行统一监控
  3.   希望封装或者隐蔽子系统时

 

代码实现

  1. package com.designPatterm.facade;
  2. /**
  3. * 门面模式
  4. */
  5. public class FacadeTest {
  6. public static void main(String[] args) {
  7. BaoGongTou baoGongTou = new BaoGongTou();
  8. baoGongTou.startWork();
  9. }
  10. }
  11. // 钢筋
  12. class GangJing{
  13. public void show(){
  14. System.out.println("买了钢筋");
  15. }
  16. }
  17. // 混凝土
  18. class HunNingTu{
  19. public void show(){
  20. System.out.println("买了混凝土");
  21. }
  22. }
  23. // 师傅
  24. class ShiFu{
  25. public void show(){
  26. System.out.println("请了师傅");
  27. }
  28. }
  29. // 包工头
  30. class BaoGongTou{
  31. private GangJing gangJing;
  32. private HunNingTu hunNingTu;
  33. private ShiFu shiFu;
  34. public BaoGongTou(){
  35. System.out.println("包工头就绪");
  36. gangJing = new GangJing();
  37. hunNingTu = new HunNingTu();
  38. shiFu = new ShiFu();
  39. }
  40. //包工头开始干活
  41. public void startWork(){
  42. gangJing.show();
  43. hunNingTu.show();
  44. shiFu.show();
  45. }
  46. }

打印结果

  1. 包工头就绪
  2. 买了钢筋
  3. 买了混凝土
  4. 请了师傅

外观模式很简单,是编码中经常用到的一种方式,特别是重构代码的时候。

 

关键字设计模式