zoukankan      html  css  js  c++  java
  • java设计模式-外观模式

      第一次好好的看设计模式,可能有不对的地方,大佬们可以下面指出,感谢!

      ----------- 分割线 ----------

    uml图:

    左图为杂乱的代码,右图为使用外观模式后的代码。

    示例:现在火热的springcloud的zuul组件设计就是个外观模式,所有请求都经过zuul,然后去请求具体服务。

     好了,上代码

    定义上司类

    public class Boss {
    
        StaffA staffA;
        StaffB staffB;
        StaffC staffC;
    
        public void Initialization() {
            staffA = new StaffA();
            staffB = new StaffB();
            staffC = new StaffC();
        }
    
        public void start () {
            staffA.say();
            staffC.say();
            staffC.say();
        }
    
    }

    定义3个员工:

    public class StaffA {
    
        public void say(){
            System.out.println("我是员工A");
        }
    
    }
    public class StaffB {
    
        public void say() {
            System.out.println("我是员工B");
        }
    
    }
    public class StaffC {
    
        public void say() {
            System.out.println("我是员工C");
        }
    
    }

    调用出:

    public class Main {
    
        public static void main(String[] args){
            Boss boss = new Boss();
            boss.Initialization();
            //老板想让下面的员工都说一下自己的名字
            boss.start();
        }
    
    }

    执行结果:

    使用外观模式,我们就不用关注每个员工是怎么去做的(员工A是站着喊名字,员工B躺着喊,我们都不用管),我们只需要关注上司的情况就行,调用上司的执行方法,由上司再去调度下属。

    优点:代码耦合度降低了,个个子系统之间职责分明。

    缺点:违背了开闭原则,需要去频繁修改外观类。

  • 相关阅读:
    BZOJ 5358 口算训练/HDU 6287(可持久化线段树)
    HDU 4288 Coder
    FZU 2289 项链
    jQuery
    HTML5存储技术Storage
    JS第三部分--BOM浏览器对象模型
    JS第二部分--DOM文档对象模型
    JS第一部分--ECMAScript5.0标准语法 (JS基础语法)
    python离线安装包
    DB2不记日志插入,python迭代器操作xlrd,python操作xlwt
  • 原文地址:https://www.cnblogs.com/ghsy/p/11127838.html
Copyright © 2011-2022 走看看