• 外观模式


      外观模式是软件工程中常用的一种软件设计模式。它为子系统中的一组接口提供一个统一的高层接口并向客户端暴露,隐藏了系统的复杂性,这一接口使得子系统更加容易使用。

      它主要由两部分组成,一部分是子系统(包括接口,实现类,等等),一部分是外观接口和实现类,外观接口负责提供客户端定制的服务,外观实现则负责组合子系统中的各个类和接口完成这些服务,外观接口则是提供给客户端使用的,这样就解除了客户端与子系统的依赖,而让客户端只依赖于外观接口,这是一个优秀的解耦实践。

      例如电脑开机需要借助cpu、disk、memory等按照先后顺序执行相应的方法才能正常启动,而我们用户却不需要关心这些,只需要去按一下开机键即可,这里面便有外观模式的思想。我们经常说的三层架构,其实业务层也是外观模式的应用,通过添加业务层,实现了表现层和数据访问层的解耦,表现层只需要去业务层调用接口即可而不需要关心数据是如何获取和存储的。下面的简单的demo。

    子系统代码

    package com.example.demo.facade;
    
    public interface Cpu {
        void start();
    }
    package com.example.demo.facade;
    public interface Disk {
        void start();
    }
    package com.example.demo.facade;
    
    public interface Memery {
        void start();
    }
    package com.example.demo.facade;
    
    public class IntelCpu implements Cpu{
        @Override
        public void start() {
            System.out.println("IntelCpu启动");
        }
    }
    package com.example.demo.facade;
    
    public class CaihongDisk implements Disk{
        @Override
        public void start() {
            System.out.println("CaihongDisk启动");
        }
    }
    package com.example.demo.facade;
    
    public class JinshidunMemory implements Memery{
        @Override
        public void start() {
            System.out.println("JinshidunMemory启动");
        }
    }

    外观接口

    package com.example.demo.facade;
    
    public interface Facade {
        void computerStart();
    }

    外观实现

    package com.example.demo.facade;
    
    public class AcerComputer implements Facade{
    
        private Cpu cpu;
        private Disk disk;
        private Memery memery;
    
        public AcerComputer() {
            this.cpu = new IntelCpu();
            this.disk = new CaihongDisk();
            this.memery = new JinshidunMemory();
        }
    
    
        @Override
        public void computerStart() {
            cpu.start();
            disk.start();
            memery.start();
        }
    }

    测试client

    package com.example.demo.facade;
    
    public class Client {
        public static void main(String[] args) {
            Facade f = new AcerComputer();
            f.computerStart();
        }
    }

      结果就不贴了,可以看出通过适用外观模式,系统实现了子系统与客户端之间的松耦合关系,客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。

      外观模式的适用情况:
      (1)设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。

      (2) 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。

      (3) 维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。

  • 相关阅读:
    NuGet文件下载与应用
    两款Mongodb可视化工具
    原创 | 入门数据分析--SQL常用操作(+提取数据实例)
    原创 | 入门数据分析--数据存储之常用数据库及区别
    原创 | 入门数据分析--如何获取外部数据(+python爬虫实例)?
    原创 | 入门数据分析--如何建立需求解决框架?
    原创 | 入门数据分析--如何进行需求判定?
    原创 | 入门数据分析--如何更好的理解业务?
    原创 | 如何入门数据分析?
    原创 | 数据分析师的前景如何?
  • 原文地址:https://www.cnblogs.com/hhhshct/p/10148470.html
Copyright © 2020-2023  润新知