设计模式-外观模式

匆匆过客 提交于 2019-12-24 04:37:01

外观模式思维导图
外观模式思维导图

设计模式-外观模式
1、定义

定义一个高层接口,使子系统更易使用,提供一致界面。(简化用户与子系统的交互。)

2、分类

分类:结构型模式。

3、优点&缺点

优点:
使客户和子系统的类无耦合,子系统使用更方便;
只提供更简洁界面,不影响用户直接使用子系统的类;
子系统中任何类的方法的改变,不影响外观类。

缺点:
不满足开闭原则;(在不引入抽象外观类时,增加新的子系统可能会改变外观类代码。)
不能很好限制用户使用子系统。

遵循迪米特法则:一个类对自己依赖的类知道的越少越好。即,对于被依赖的类,无论逻辑多么复杂,尽量将逻辑封装在类的内部。

4、适用场景

对于复杂子系统,需为用户提供简单交互操作;
不希望客户与子系统的类耦合,提高子系统独立性和可移植性;
当整个系统需要构建一个层次结构的子系统,不希望子系统相互直接交互。

5、UML类图

外观模式UML类图
角色:
子系统 Subsystem:若干类的集合,这些类的实例协同为用户提供所需功能。
外观 Facade:包含子系统全部或部分类的实例引用。

6、代码实现
//step1. 子系统 Subsystem:若干类的集合,这些类的实例协同为用户提供所需功能
class ClassA {
	public void methodA() {
		System.out.println("method A");
	}
}
class ClassB {
	public void methodB() {
		System.out.println("method B");
	}
}
//step2. 外观 Facade:包含子系统全部或部分类的实例引用
class Facade {
	private ClassA classA;
	private ClassB classB;
	public Facade() {
		classA = new ClassA();
		classB = new ClassB();
	}
	public void method() {
		classA.methodA();
		classB.methodB();
	}
}
//step3. Demo
public class TestAwen {
	public static void main(String[] args) {
		Facade facade = new Facade();
		facade.method();
	}
}

运行结果截图
外观模式运行结果截图

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!