软件构造-外观模式
- 实验内容
某系统需要提供一个文件加密模块,加密流程包括三个操作,分别是读取源文件、加密、保存加密之后的文件。读取文件和保存文件使用流来实现,这三个操作相对独立,其业务代码封装在三个不同的类中。现在需要提供一个统一的加密外观类,用户可以直接使用该加密外观完成文件的读取、加密和保存三个操作,而不需要与每一个类进行交互,使用外观模式设计该加密模块。
- 设计类图
- 具体代码
- 实现类接口
- 具体实现类(4个分别为四种文件格式)
- 抽象类
- 扩充抽象类(3个)
扩充抽象类三个分别为WindowsVersion、LinuxVersion、UnixVersion
- 测试代码
- 实验结果
- 分析、总结
- 抽象化角色:抽象化给出定义,包含一个对实现化对象的引用
- 具体抽象化角色:扩展实现抽象化角色
- 实现化角色:这个角色给出实现化角色的接口,但不具体实现。这个 角色与抽象化角色不一定需要相同。相反可以完全不同。相当于抽象 化 角色对应的是一个维度,而实现化角色对应的是第二个维度。
- 具体实现化角色:扩展实现实现化角色
桥接模式。就是将一个类中两个维度进行分离开来。将抽象接口与实现解耦。然后通过组合桥接关联在一起。组合使用。其两个对象都是抽象,然后其子类具体实践。由抽象接口对实现化角色的对象的引用来关联。桥接模式适合用于两个维度常变化的类。把多角度分离出来,然后让他们独立变化,减少耦合。
- 具体代码
- 功能类(3个功能,文件读取,文件加密,文件保存)
- 外观类
- 测试类
- 实验结果
- 读入的文件
- 写出的文件
- 分析、总结
根据“单一职责原则”,在软件中将一个系统划分为若干个子系统有利于降低整个系统的复杂性,一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小,而达到该目标的途径之一就是引入一个外观对象,它为子系统的访问提供了一个简单而单一的入口。
还降低了原有系统的复杂度,同时降低客户类与子系统的耦合度
外观模式适用的场景有:
- 当要为一个复杂子系统提供一个简单接口时可以使用外观模式
- 客户程序与多个子系统之间存在很大的依赖性
- 在层次化结构中