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

    概述

    设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
    使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
    设计模式可以分为三大类,分别是创建型、结构型和行为型。

    结构型

    外观模式(Facade Pattern)

    外观模式又称为门面模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个子系统更加容易使用。

    结构图

    image.png

    应用场景

    为复杂的模块或者子系统提供外界访问的模块。子系统相对独立的场景。预防低水平人员带来的风险。Java中的日志框架slf4j就使用了外观模式,利于维护和各个类的日志处理系统的统一。

    优点

    减少系统相互依赖;提高灵活性;提高了安全性

    缺点

    不符合开放封闭原则,改东西很麻烦,继承重写都不合适。

    代码

    子系统类

    public class SubSystemOne {
        public void methodOne(){
            System.out.println("子系统方法一");
        }
    }
    public class SubSystemTwo {
        public void methodTwo(){
            System.out.println("子系统方法二");
        }
    }
    public class SubSystemThree {
        public void methodThree(){
            System.out.println("子系统方法三");
        }
    }
    

    外观类

    public class Facade {
        SubSystemOne subSystemOne;
        SubSystemTwo subSystemTwo;
        SubSystemThree subSystemThree;
    
        public Facade(){
            subSystemOne = new SubSystemOne();
            subSystemTwo = new SubSystemTwo();
            subSystemThree = new SubSystemThree();
        }
    
        public void methodA(){
            System.out.println("方法组 A()---");
            subSystemOne.methodOne();
            subSystemTwo.methodTwo();
            subSystemThree.methodThree();
        }
    
        public void methodB(){
            System.out.println("方法组 B()---");
            subSystemOne.methodOne();
            subSystemTwo.methodTwo();
        }
    
    }
    

    测试类

    public class JavaDemo {
        public static void main(String[] args){
            Facade facade = new Facade();
            facade.methodA();
            facade.methodB();
        }
    }
    

    运行结果如下

    方法组 A()---
    子系统方法一
    子系统方法二
    子系统方法三
    方法组 B()---
    子系统方法一
    子系统方法二
    

    注:

    本文参考了书籍《大话设计模式》和菜鸟教程设计模式相关部分资料

  • 相关阅读:
    使用C#替换Word文档里的文字和图片
    《程序员的思维修炼—开发认知潜能的九堂课》—从新手到专家的历程
    从已有数据库表生成Insert语句的小工具
    我的2010
    Sqlite批量插入速度慢的解决方法小计
    分享一个winForm下的Chart控件
    分享一个任务提醒小工具
    SpringBoot+Vue+Echarts实现选择时间范围内数据加载显示柱状图
    Winform中选取指定文件夹并获取其下所有文件
    Vue中JS遍历后台JAVA返回的Map数据,构造对象数组数据格式
  • 原文地址:https://www.cnblogs.com/helloDuo/p/10491038.html
Copyright © 2011-2022 走看看