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

    外观模式又称为门面模式,为一组类似功能的集群,比如类库、子系统等,提供一致的入口供client调用

    角色和职责:

    1.门面(Facade)-Computer:

       外观模式的核心。它被客户角色调用,它熟悉子系统的功能。内部根据客户角色的需求预定了几种功能的组合

    2.子系统(Packages)=CPU、Memory、Disk:

       实现了子系统的功能。它对客户角色和Facade时未知的。它内部可以有系统内的相互交互,也可以由供外界调用的接口

    UML图:

    具体源码:

    /**
     * CPU
     */
    public class CPU {
        /**
         * 启动CPU
         */
        public void startCpu(){
            System.out.println("启动CPU");
        }
    
        /**
         * 关闭CPU
         */
        public void shutdownCpu(){
            System.out.println("关闭CPU");
        }
    }
    /**
     * 内存条
     */
    public class Memory {
        public void startMemory(){
            System.out.println("启动内存");
        }
        public void shutdownMemory(){
            System.out.println("关闭内存");
        }
    }
    /**
     * 桌面
     */
    public class Disk {
        public void startDisk(){
            System.out.println("启动桌面");
        }
        public void shutdownDisk(){
            System.out.println("关闭桌面");
        }
    }
    /**
     * 电脑
     */
    public class Computer {
        private CPU cpu = null;
        private Memory memory = null;
        private Disk disk = null;
        public Computer(){
            this.cpu = new CPU();
            this.memory = new Memory();
            this.disk = new Disk();
        }
    
        /**
         * 启动电脑
         */
        public void start(){
            this.cpu.startCpu();
            this.memory.startMemory();
            this.disk.startDisk();
        }
    
        /**
         * 关闭电脑
         */
        public void shutdown(){
            this.cpu.shutdownCpu();
            this.memory.shutdownMemory();
            this.disk.shutdownDisk();
        }
    }
    public class Main {
        public static void main(String[] args) {
            Computer computer = new Computer();
            computer.start();//启动电脑
            System.out.println("------------------------------------------");
            computer.shutdown();//关闭电脑
        }
    }

    优缺点:

    优:

    • 松散耦合:使得客户端和子系统之间解耦,让子系统内部的模块功能更容易扩展和维护;
    • 简单易用:客户端根本不需要知道子系统内部的实现,或者根本不需要知道子系统内部的构成,它只需要跟Facade类交互即可。
    • 更好的划分访问层次:有些方法是对系统外的,有些方法是系统内部相互交互的使用的。子系统把那些暴露给外部的功能集中到门面中,这样就可以实现客户端的使用,很好的隐藏了子系统内部的细节

    应用场景:

    为复杂的模块或子系统提供外界访问的模块

    子系统相互独立

    在层析结构中,可以使用外观模式定义系统的每一层的入口。

    源码地址:https://github.com/qjm201000/design_pattern_facade.git

     

  • 相关阅读:
    SpringBoot自定义FailureAnalyzer
    Linux 系统目录结构
    Spring Boot实战:静态资源处理
    Activiti7整合SpringBoot(十二)
    Acvitivi网关(十一)
    为什么阿里巴巴要禁用Executors创建线程池?
    lqb 基础练习 数列排序 (sort的使用)
    lqb 入门训练 A+B问题
    lqb 入门训练 序列求和 (PS:用长整数做数据的输入输出)
    lqb 入门训练 圆的面积 (PS: PI的精确计算方法 atan(1.0) * 4)
  • 原文地址:https://www.cnblogs.com/qjm201000/p/10069511.html
Copyright © 2011-2022 走看看