JAVA设计模式之外观模式

tech2025-10-25  2

外观模式

定义

为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层的接口,使得子系统更加容易实现

说明:“接口”为泛指模块对外开放的类

结构

**Facade:**定义子系统多个模块对外的高处接口,通常需要调用内部多个模块,从而把客户的代理请求给适当的子系统对象

**模块:**接受facade对象的委派,真正实现功能,各个模块之间可能有交互。

Facade对象知道各个模块,但各个模块不应该知道Facade对象。

代码

public interface AModel { public void testA(); } public interface BModel { public void testB(); } public interface CModel { public void testC(); } public class AModelImpl implements AModel{ @Override public void testA() { System.out.println("A模块测试testA方法"); } } public class BModelImpl implements BModel{ @Override public void testB() { System.out.println("B模块测试testB方法"); } } public class CModelImpl implements CModel{ @Override public void testC() { System.out.println("C模块测试testC方法"); } } public class Facade { public void test(){ AModel aModel = new AModelImpl(); BModel bModel = new BModelImpl(); CModel cModel = new CModelImpl(); aModel.testA(); bModel.testB(); cModel.testC(); } } public class Client { public static void main(String[] args) { new Facade().test(); } }

目的

让外部减少与子系统内多个模块的交互,松散耦合,从而让外部能够更简单的使用子系统。不改变原先功能,Facade方便客户端的调用、封装内部细节、实现功能的共享和复用。有外观可以不使用。外观提供了缺省的功能实现

实现

把外观类当成一个辅助工具类实现Facade可以实现成为接口有选择性的暴露接口方法,尽量减少模块对子系统外提供的接口方法

Facade的方法只是实现一个功能的组合调用

优缺点

松散耦合简单易用更好的划分访问层次(选择性暴露接口方法)过多的或者不太合理的Facade也容易让人迷惑

本质

封装交互、简化调用体现了“最少知识原则”

何时选用外观模式

希望复杂(指与客户端交互复杂)的子系统提供一个简单接口时,使用简化客户的使用。让客户程序和抽象类的实现部分实现松散耦合,提高子系统的独立性和移植性。构建多层结构系统,简化层间关系,松散层次之间的依赖关系。

本章节附带视频已上传

最新回复(0)