设计模式之门面模式
2015-12-10 15:18
246 查看
一、定义
二、实例
三、本质
四、注意
要求一个子系统与其它系统信息的交互必须通过一个统一的类来进行,这个类就是门面类。在一个子系统里面,这种门面类可能不止一个,但是每一个门面类都只是向外界提供子系统中类的访问方法。
二、实例
我们一定去邮局寄过东西,现在的邮局功能很多,跨国邮件、大型邮件、快件等等各种功能,每一种功能邮局里都有相对应的窗口进行服务。我们不需要知道哪些窗口是怎么工作的,邮局的人是怎么包东西、怎么寄东西的,我们只要把东西和必要信息给窗口的工作人员就行了,这里的各种窗口就相当于门面模式中的门面类。我们来模拟一下上面的这个场景。 先定义一个邮局发送信件的接口,其中,只有sendWritter是高层模块能够调用的,其他方法都是只能在子系统中调用。
public interface ISendmail { public void setInfo(Object object,String address); public void packageing(); public void send(); public void sendWritter(Object object,String address); }
实现邮局类
public class EMS implements ISendmail{ @Override public void setInfo(Object object, String address) { System.out.println("邮件内容:"+object.toString()+"目的地址:"+address); } @Override public void packageing() { System.out.println("打包"); } @Override public void send() { System.out.println("发送邮件"); } @Override public void sendWritter(Object object, String address) { this.setInfo(object, address); this.packageing(); this.send(); } }
邮局开放的窗口
public class EMSWindow { private EMS ems = null ; public EMSWindow() { this.ems = new EMS(); } public void sendWritter(Object object,String address) { this.ems.sendWritter(object, address); } }
测试类
public class Test { public static void main(String[] args) { EMSWindow emsWindow = new EMSWindow(); emsWindow.sendWritter("苹果", "njust"); } }
结果
邮件内容:苹果目的地址:njust 打包 发送邮件
三、本质
我觉得门面模式的本质就是将对其它系统提供功能的类或函数放到一起,也就是说把子系统的功能封装到一个类里面。 在上面的例子中,门面类对外提供了sendWritter函数作为子系统对外提供的功能,不管邮局的人怎么传递你的邮件,飞机、火车、汽车、轮船、量子传送门等等,你只要把该给的信息给他就行了。
四、注意
门面类不应该参与子系统业务逻辑,也就是说门面类只能对外提供接口函数,但是这个函数里面的内容也只不过是调用子系统中某个类的某个函数而已。
相关文章推荐
- XML中必须进行转义的字符
- NDPI的分析
- win7安装教程
- vc window style
- Bonfire: Check for Palindromes 答案
- stm32_NVIC中段优先级
- Climbing Stairs
- UIButton的Image和Title的布局
- 多行文本溢出显示省略号(…)全攻略
- dom4j
- net搭建热插拔式web框架(沙箱的构建)
- python实例编写(2)--等待,一组对象,层级元素,frame对象处理
- 用requestAnimationFrame优化你的javascript动画
- [Leetcode]Longest Palindromic Substring
- 【反思】:反思之计网考试前
- opencv 相关
- winForm程序生成安装包覆盖安装
- 设计模式之观察者模式
- 数据库高可用架构(MySQL、Oracle、MongoDB、Redis)
- C++库一览