设计模式之外观模式(结构型)
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 对象交互
以上是关于设计模式之外观模式(结构型)的主要内容,如果未能解决你的问题,请参考以下文章