外观模式

作者: 某人_Valar | 来源:发表于2018-03-26 13:54 被阅读51次

    作者:某人_Valar
    如需转载请保留原文链接;

    设计模式的3大类:

    • 创建型模式(5种)建造者模式,单例模式,工厂方法模式,抽象工厂模式,原型模式。
    • 结构性模式(7种)适配器模式,装饰模式,代理模式,外观模式,桥接模式,组合模式,享元模式。
    • 行为型模式(11种)策略模式,模板方法模式,观察者模式,迭代器模式,责任链模式,命令模式,备忘录模式,状态模式,访问者模式,中介者模式,解释器模式。

    1. 什么是外观模式

    外观模式隐藏了系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。
    一般在外观模式中有下面几个角色:

    • Facade:外观类,知道哪些子系统负责处理请求,将客户端的请求代理给适当的子系统对象。
    • Subsystem:子系统类,可以有一个或者多个子系统。实现子系统的功能,处理外观类指派的任务,注意子系统类不含有外观类的引用。

    2. 外观模式的简单实现

    (1)子系统类
    //子系统招式
    public class Zhaoshi {
        public void TaiJiQuan(){
            System.out.println("使用招式太极拳");
        }
        public void QiShangQuan(){
            System.out.println("使用招式七伤拳");
        }
        public void ShengHuo(){
            System.out.println("使用招式圣火令");
        }
    }
    
    //子系统内功
    public class NeiGong {
        public void JiuYang(){
            System.out.println("使用九阳神功");
        }
        public void QianKun(){
            System.out.println("使用乾坤大挪移");
        }
    }
    
    //子系统经脉
    public class JingMai {
        public void jingmai(){
            System.out.println("开启经脉");
        }
    }
    
    (2)外观类

    初始化外观类的同时将各个子系统类创建好,并进行搭配。

    //外观类张无忌
    public class ZhangWuJi {
        private JingMai jingMai;
        private Zhaoshi zhaoshi;
        private NeiGong neiGong;
    
        public ZhangWuJi() {
            jingMai = new JingMai();
            zhaoshi = new Zhaoshi();
            neiGong = new NeiGong();
        }
    
        /**
         *  使用乾坤大挪移
         */
        public void Qiankun(){
            jingMai.jingmai();// 开启经脉
            neiGong.QianKun(); //使用内功乾坤大挪移
        }
    
        /**
         * 使用七伤拳
         */
        public void Qishang(){
            jingMai.jingmai();// 开启经脉
            neiGong.JiuYang(); //使用内功九阳神功
            zhaoshi.QiShangQuan(); // 使用招式七伤拳
        }
    }
    
    (3)测试类

    客户端调用

    public class Test {
        public static void main(String[] args){
            ZhangWuJi zhangWuJi = new ZhangWuJi();
            //张无忌使用乾坤大挪移
            zhangWuJi.Qiankun();
            //张无忌使用七伤拳
            zhangWuJi.Qishang();
        }
    }
    

    运行结果:


    image.png

    3. 外观模式优缺点

    优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。

    缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

    4.外观模式与装饰模式的区别

    装饰模式:封装一个对象,并提供额外的行为,用组合的方式来替代继承以扩展类的功能。

    外观模式:封装许多对象,简化它们的接口,定义了一个更高层的接口,使得子系统更容易被调用。

    参考:

    《Android进阶之光》
    外观模式-菜鸟教程

    相关文章

      网友评论

      本文标题:外观模式

      本文链接:https://www.haomeiwen.com/subject/iqhlcftx.html