设计模式(9)---外观模式

摘要:
Facade1.概述Facade模式:为子系统中的一组接口提供一致的接口。该模式定义了一个高级接口,使该子系统更易于使用。外观模式是德米特规则的一个具体实现。通过引入新的外观角色,可以降低原始系统的复杂性,并减少客户类和子系统之间的耦合。所有涉及与多个业务对象交互的场景都可以使用外观模式进行重构。

外观模式 Facade (结构型模式)

1.概述

外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

外观模式是迪米特法则的一种具体实现,通过引入一个新的外观角色可以降低原有系统的复杂度,同时降低客户类与子系统的耦合度。

例如:你请朋友吃饭,你可能需要买菜,洗菜,切菜,做菜等等这些模块,现在你去餐馆去吃,这些步骤他们帮你搞定,餐馆的服务就相当于一个外观类。

2.结构图

设计模式(9)---外观模式第1张

3.代码

现在需要读入一个文件,对文件的数据加密后,输出加密后的文件

1 public class FileReader {
2 
3     public void read(){
4         System.out.println("读文件");
5     }
6 
7 }
1 public class FileProcess {
2 
3     public void process(){
4         System.out.println("对文件加密");
5     }
6 
7 }
1 public class FileWriter {
2 
3     public void writer(){
4         System.out.println("写文件");
5     }
6 
7 }
 1 /*
 2  * 外观类
 3  */
 4 public class Facade {
 5 
 6     private FileReader fileReader ;
 7     private FileProcess fileProcess ;
 8     private FileWriter fileWriter ;
 9     
10     public Facade() {
11         fileReader = new FileReader() ;
12         fileProcess = new FileProcess();
13         fileWriter = new FileWriter() ; 
14     }
15     
16     public void FileEncrypt(){
17         fileReader.read();
18         fileProcess.process();
19         fileWriter.writer();
20     }
21 
22 }
1 public class Test {
2 
3     public static void main(String[] args) {
4         Facade facade = new Facade();
5         facade.FileEncrypt();
6     }
7 
8 }

假如不使用外观类的话,客户类需要3个子系统的实例化对象,使得类与类之间的耦合性增加,引入外观模式则降低了耦合性,如果需要增加新的子系统或者移除子系统都非常方便,客户类无须进行修改(或者极少的修改),只需要在外观类中增加或移除对子系统的引用即可。

绝大多数B/S系统都有一个首页或者导航页面,大部分C/S系统都提供了菜单或者工具栏,在这里,首页和导航页面就是B/S系统的外观角色,而菜单和工具栏就是C/S系统的外观角色,通过它们用户可以快速访问子系统,降低了系统的复杂程度。所有涉及到与多个业务对象交互的场景都可以考虑使用外观模式进行重构。

免责声明:文章转载自《设计模式(9)---外观模式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇EasyUI:年份、月份下拉框Demo如何调试没有源码的.Net程序下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

设计模式(9)外观模式

我们每天上班回到家的时候都会做一系列的动作,像打开灯、打开电视和打开音响,用代码描述就如下一样。 public class Light { public void on() { System.out.println("打开了灯!"); } public void off() { System.ou...

h5新特性 File API详解

  之前一直觉得h5的新特性就是一些新标签呢,直到想研究一下图片上传预览的原理,才发现还是有好多新的api的,只是不兼容ie低版本,挺可惜的,   File API在表单中文件输入字段基础上,又添加了一些直接访问文件信息的接口。H5在DOM中为文件输入元素添加了一个files集合,在通过表单元素选择了一个或多个文件时,files集合中将包含一组file对象...

外观模式小试

一、介绍: 引用《研磨设计模式》中的定义:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这一接口使得这一子系统更易于使用。 外观模式的本质是——封装交互、简化调用。 什么意思呢?外观模式封装交互的目的,就是简化调用。说白了,就是要讲各个模块之间复杂的交互,放到外观类的某些方法中。然后在外观类中选择性的将某些方法暴露给外部去调用...

IO操作

IO流 1.IO用来处理设备之间的数据传输2.Java对数据的操作通过流的方式3.Java用于操作流的对象都在IO中4.流操作数据分两种,字节流和字符流5.流按流向可以分为:输入流和输出流 IO流常用基类 字节流的抽象基类InputStream OutputStream 字符流的抽象基类Reader Writer 注:由这四个派生出来额子类名称都是以其父类...

前端本地文件操作与上传

需要通过用户触发,用户可通过以下三种方式操作触发: 通过input type="file" 选择本地文件 通过拖拽的方式把文件拖过来 在编辑框里面复制粘贴 相关实践:https://www.zhangxinxu.com/wordpress/tag/blob/ 通过input type="file" 选择本地文件 选择文件 第一种是最常用的手段,通常还...

web读取本地文档

FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。 其中File对象可以是来自用户在一个<input>元素上选择文件后返回的FileList对象,也可以来自拖放操作生成的 DataTransfer对象,还可以是来自在一个HTMLCan...