定义
为了子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得子系统更加容易使用。
案例
比如现在有一个文件系统,它有很多的类,例如File,Directory,InputStream,OutputStream,ByteStream, NetworkAccess,Convertor等等,用这些类可以对文件进行打开,保存和转换,既可以在本地运行,也可以辅助NetworkAccess进行网络的存储和读取。用户在使用的时候不需要关系底层的实现,他只需要一个接口,提供了所需要的功能即可:
class File {public:const string& fileName() const;ByteStream* data() const;}class NetworkAccess {public:void post(string url, ByteData* data);ByteData* get(string url);}
根据这两个类就可以进行相关的操作:
class NetworkFile {public:void saveFile(string url, string path);File* loadFile(string url);}void NetworkFile::saveFile(string url, string path) {Inputstream is(path);NetworkAccess networkAccess;networkAccess.put(url, is);}File* NetworkFile::loadFile(string url) {NetworkAccess networkAccess;ByteStream* data = networkAccess.get(url);File* file = new File();file.setName(getNameFromUrl(url));file.setData(data);return file;}
适用性
- 当要为一个复杂的子系统提供一个简单的单接口时
- 为了让客户程序与实现之间不存在依赖性
- 当需要构建一个层次结构的子系统时,用Facade为每一层子系统定义一个入口点
优缺点
- Facade对用户屏蔽了子系统的组件,使用起来更方便。
- 降低了耦合度。
- 如果应用需要,可以直接使用子系统的类。
本文介绍了Facade设计模式的概念,通过一个文件系统的案例展示了如何为一组复杂的子系统接口提供一个统一且简单的高级接口,使得用户更容易使用子系统。此外还讨论了该模式的适用场景及其优缺点。
2624

被折叠的 条评论
为什么被折叠?



