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()---
    子系统方法一
    子系统方法二
    

    注:

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

  • 相关阅读:
    Sum Root to Leaf Numbers 解答
    459. Repeated Substring Pattern
    71. Simplify Path
    89. Gray Code
    73. Set Matrix Zeroes
    297. Serialize and Deserialize Binary Tree
    449. Serialize and Deserialize BST
    451. Sort Characters By Frequency
    165. Compare Version Numbers
    447. Number of Boomerangs
  • 原文地址:https://www.cnblogs.com/helloDuo/p/10491038.html
Copyright © 2011-2022 走看看