设计模式之外观模式(结构型)

Posted 一起来搬砖呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之外观模式(结构型)相关的知识,希望对你有一定的参考价值。

1、外观模式定义

外观模式(Facade)为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使系统更加容易使用

当一个系统随着时间的流逝,子系统越来越多,功能越来越复杂,如果系统内某个接口改变,客户端也要跟着改变,违背了开闭原则,也违背了 迪米特法则,所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观模式的目标。

2、外观模式结构

三个子系统的类:

import org.springframework.stereotype.Service;

/**
 * 子系统类一
 */
@Service
public class SubSystemOne 

    public void methodOne() 
        System.out.println("子系统方法一");
    



/**
 * 子系统类二
 */
@Service
public class SubSystemTwo 

    public void methodTwo() 
        System.out.println("子系统方法二");
    



/**
 * 子系统类三
 */
@Service
public class SubSystemThree 

    public void methodThree() 
        System.out.println("子系统方法三");
    


外观类:Facade,对子系统的方法或者属性进行组合,供外界调用

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 外观类,对子系统的方法或者属性进行组合
 */
@Component
public class Facade 

    @Autowired
    private SubSystemOne subSystemOne;

    @Autowired
    private SubSystemTwo subSystemTwo;

    @Autowired
    private SubSystemThree subSystemThree;

    /**
     * 组合方法 A
     */
    public void methodA() 
        System.out.println("方法组合A------");
        subSystemOne.methodOne();
        subSystemTwo.methodTwo();
        subSystemThree.methodThree();
    

    /**
     * 组合方法 B
     */
    public void methodB() 
        System.out.println("方法组合B------");
        subSystemTwo.methodTwo();
        subSystemThree.methodThree();
    



调用方代码

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;

@TestPropertySource("classpath:test.properties")
@SpringBootTest(classes = Application.class)
public class FacadeTest extends BaseTest 

    @Autowired
    private Facade facade;

    @Test
    public void test() 
        facade.methodA();
        facade.methodB();
    



// 方法组合A------
// 子系统方法一
// 子系统方法二
// 子系统方法三
// 方法组合B------
// 子系统方法二
// 子系统方法三

3、外观模式应用场景

  • 在设计初期阶段,应该要有意识的将不同的层分离,比如经典的三层架构,就需要我们在数据访问层、业务逻辑层、表示层之间建立外观 Facade,这样可以为复杂的子系统提供一个简单的接口,降低耦合
  • 在开发中,系统功能增加,系统会越来越复杂,增加外观 Facade 可以减少类之间的依赖
  • 在后期对系统的维护中,可以开发一个新的 Facade 类,来提供设计粗糙或者复杂遗留代码的比较清晰简单的接口,让新的系统与 Facade 对象交互

以上是关于设计模式之外观模式(结构型)的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之外观模式

23种设计模式(21):外观模式

设计模式--结构模式--门面模式

结构型模式之 外观模式

2 结构型模式之 - 外观模式

结构型模式之外观模式