• 设计模式之(十三)外观模式(Facade)


    外观模式思想

      历史上牛人中成功逆袭,实现人生辉煌的人很多,这群人最耀眼的无疑是明太祖朱元璋,从一个放牛讨饭的最低层小屌丝逆袭到人类权力顶峰开国皇帝,确实是我等膜拜的对象。在发不断的发展过程中,其实就在利用外观模式的这个思想,接下来我们就娓娓道来。

      朱元璋同学为了吃饭问题造反,开始是小兵一枚,但是造反很用心,很快被提升到了九人长。这个时候他开始展示管理智慧,由于就是九个人,所以朱元璋对这九个人吃多少拉多少可谓了如指掌。

      朱同学造反砍人很厉害,很快就成了将军。下手有了几千人,他不可能对每个人就亲自管理 。于是就把这些人分别分给了他的亲密小伙伴徐达、常遇春、冯胜、李善长等人。让下面的人的归这几个人管理。下面小兵有了事情就分别找自己的头,不能再去找老大朱元璋了。而这几个头头在把事情总结下来,写个简章让朱元璋老大了解。

      要给敌人干仗了。就找来李善长,让其好好准备粮草、马匹;’找来徐达让其正面进攻;找来常遇春,让其偷袭;找来冯胜,让其接应。具体他们的任务怎么完成,朱老大不太关心,你把我给你的任务好好完成就好了。想想如果这时候要是把士兵一个一个找来分配,只怕任务没有分配完,就被对方给消灭赶紧了。

      好了介绍到这里,外观模式的例子就很好的体现出来了。就是把相近的目标的类封装起来,客户想要这些功能了不用去一个一个了解调用。直接调用封装接口就好了。具体封装的里面怎么工作,调用方并不关心。这样使得做起来方面高效。

      接下来就看看外观模式的定义:为子系统中的一组接口提供一个一致的界面或者高层接口,使得这个子系统使用起来更加方面,高效。 给出一个直观的图形来看下这个模式。

      上面这个图形把这个模式很直观很形象的展示了出来。这个模式理解起来非常的容易。下面用简单展示一下模式的代码。

    public class ModuleA {
        public void display(){
            System.out.println("模块A");
        }
    }
    
    public class ModuleB {
        public void display(){
            System.out.println("模块B");
        }
    }
    
    public class ModuleC {
        public void display(){
            System.out.println("模块C");
        }
    }
    
    public class Facade {
        private static Facade facade = new Facade();
        
        private Facade(){}
        
        public static Facade getInstance(){
            return facade;
        }
        
        public void test(){
            new ModuleA().display();
            new ModuleB().display();
            new ModuleC().display();
        }
    }
    
    public class Client {
        public static void main(String[] args) {
            Facade.getInstance().test();
        }
    }

    /*************************************************************************/

    模块A
    模块B
    模块C

     

    适用场合

      1、一个子系统往往需要很多模块组成,为了更好的子系统被使用,需要设置一个统一对外的接口。也就是适合使用外观模式

      2、客户程序与抽象类的实现部分之间存在着很大的依赖性。引入 f a c a d e将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。

      3、创建一个有层次的子系统时,也可以使用这个模式。

    优势

      1、使得子系统和外部的调用类降低依赖,实现松耦合

      2、子系统内部调整算法不影响外部的调用代码。

      3、使得对子系统的调用更加的高效,方便。

  • 相关阅读:
    Docker系统知识整理(从安装到熟练操作)
    Dockerfile 文件介绍
    Cmake命令之add_subdirectory介绍
    Cmake实战指南
    cmake的四个命令:add_compile_options、add_definitions、target_compile_definitions、build_command
    cmake:选择编译器及设置编译器选项
    Task异常
    单元测试误区
    网络的核心概念
    java~使用枚举来实现接口的多态
  • 原文地址:https://www.cnblogs.com/pengweiqiang/p/11329668.html
Copyright © 2020-2023  润新知