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

    外观模式(结构型模式)

    • 定义

    外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易试用。[DP]

    外观模式简单点说,就是通过外观类把所有的子系统类进行组合,供外部调用。

    这样既不暴露内部,也降低了耦合。对照下面这张图能很好的理解外观模式(MVC三层架构就使用到了外观模式)


    • 特点
    1. 子系统不被直接调用
    2. 外观类去组合所有的子系统类实现,供外部使用。
    3. 外观类需要知道所有子系统

    • 结构

    Client:外部调用类,客户端类

    Facade:外观类

    SubSystem Classes:子系统类


    • 代码

    例子:启动电脑时,会启动CPU、硬盘、显卡。现在电脑类作为外观类,CPU、硬盘、显卡类作为子系统类,使用电脑的人作为客户端。客户端只允许电脑开机和电脑关机,CPU、硬盘、显卡的启动和停止交给电脑类(外观类)。

          子系统类集

    /**
     * @ Author     :fonxi
     * @ Date       :2019/5/24 12:38
     * @ Description:CPU
     */
    public class CPU {
        public void start(){
            System.out.println("CPU开始运行");
        }
    
        public void stop(){
            System.out.println("CPU停止运行");
        }
    }
    

      

    /**
     * @ Author     :fonxi
     * @ Date       :2019/5/24 12:45
     * @ Description:硬盘
     */
    public class HardDisk {
        public void start(){
            System.out.println("硬盘开始运行");
        }
    
        public void stop(){
            System.out.println("硬盘停止运行");
        }
    }
    

      

    /**
     * @ Author     :fonxi
     * @ Date       :2019/5/24 12:45
     * @ Description:显卡
     */
    public class GraphicsCard {
        public void start(){
            System.out.println("显卡开始运行");
        }
    
        public void stop(){
            System.out.println("显卡停止运行");
        }
    }
    

      外观类

    /**
     * @ Author     :fonxi
     * @ Date       :2019/5/24 12:34
     * @ Description:外观类 电脑类
     */
    public class Facade {
    
        private CPU cpu;
        private GraphicsCard graphicsCard;
        private HardDisk hardDisk;
    
        public Facade(){
            cpu = new CPU();
            graphicsCard = new GraphicsCard();
            hardDisk = new HardDisk();
        }
    
        //电脑开机
        public void startingUp(){
            cpu.start();
            graphicsCard.start();
            hardDisk.start();
        }
    
        //电脑关机
        public void shutdown(){
            cpu.stop();
            graphicsCard.stop();
            hardDisk.stop();
        }
    }
    

      客户端调用类

    /**
     * @ Author     :fonxi
     * @ Date       :2019/5/24 12:33
     * @ Description:客户端调用类
     */
    public class TestController {
        public void print(){
            Facade facade = new Facade();
            System.out.println("开机");
            facade.startingUp();
            System.out.println("关机");
            facade.shutdown();
        }
    }
    

      输出结果

    开机
    CPU开始运行
    显卡开始运行
    硬盘开始运行
    关机
    CPU停止运行
    显卡停止运行
    硬盘停止运行
    

     很明显,客户端只进行了开关机,而子系统集的CPU、硬盘、显卡的启动和停止都是由外观类来完成的。


    • 使用场景
    1. 当子系统类需要很高的安全性,需要隐藏,不被其他人访问时。
    2. 当子系统类外部使用起来特别复杂时

    • 优缺点

    优点:

    1. 内部隐藏,安全
    2. 内外部不直接访问,降低了耦合度
    3. 减少依赖,提高了灵活度

    缺点:

    1. 违反开闭原则,外观类耦合,修改时麻烦
    2. 增加外观类,系统复杂性提升

    • 总结

    外观模式减少外部与内部的交互,使系统松散耦合,外部调用简便。

  • 相关阅读:
    2020软件工程第四次作业04
    2020软件工程作业02
    2020软件工程作业01
    2020软件工程个人作业06——软件工程实践总结作业
    2020软件工程作业05
    2020软件工程作业00—问题清单
    2020软件工程作业03
    2020软件工程作业02
    2020软件工程作业01
    小小小-冲刺集合
  • 原文地址:https://www.cnblogs.com/fonxi/p/10928546.html
Copyright © 2011-2022 走看看