《您的设计模式》(CBF4LIFE)之“门面模式”【整理】
2016-10-27 10:54
387 查看
背景:写信的过程大家都记得吧,先写信的内容,然后写信封,然后把信放到信封中,封好,投递到信箱中进行邮递。
现在邮局开发了一个新业务,你只要把信件的必要信息告诉我,我给你发,我来做这四个过程,只要把信件交个我就成了。
先定义写信的过程接口,定义了写信的四个步骤:
写信过程的具体实现:
门面模式,增加了一个门面,Client调用时,直接调用门面的方法就可以了,不用了解具体的实现方法以及相关的业务顺序,LetterProcess接口和实现都没有改变,只是增加了一个ModenPostOffice类。
客户只要把信的内容以及收信地址给他们,他们就会把信写好,封好,并发送出去。
注:还有一个警察检查信件的类
门面模式,是一个很好的封装方法,一个子系统比较复杂的话,比如算法或者业务比较复杂,就可以封装出一个或多个门面出来,项目的结构简单,而且扩展性非常好。
一个类里就一个public方法,所有代码都在里面,然后你就看吧,一大坨的程序,看着能把人逼疯,使用门面模式后,对门面进行单元测试,约束项目成员的代码质量,对项目整体质量的提升也是一个比较好的帮助。
现在邮局开发了一个新业务,你只要把信件的必要信息告诉我,我给你发,我来做这四个过程,只要把信件交个我就成了。
先定义写信的过程接口,定义了写信的四个步骤:
package com.teng.pattern.inter; /** * 寄信过程 * <br>创建日期:2016年6月26日 * <br><b>Copyright 2016 tengxiang All Rights Reserved</b> * @author tengxiang * @since 1.0 * @version 1.0 */ public interface LetterProcess { /** * 写好信 * @since 1.0 * @param context * <br><b>作者: @author tengxiang</b> * <br>创建时间:2016年6月26日 下午4:18:08 */ void writeContext(String context); /** * 写好信封 * @since 1.0 * @param address * <br><b>作者: @author tengxiang</b> * <br>创建时间:2016年6月26日 下午4:18:33 */ void fillEnvelope(String address); /** * 把信放到信封中 * @since 1.0 * <br><b>作者: @author tengxiang</b> * <br>创建时间:2016年6月26日 下午4:19:01 */ void letterIntoEnvelope(); /** * 邮递信件 * @since 1.0 * <br><b>作者: @author tengxiang</b> * <br>创建时间:2016年6月26日 下午4:19:28 */ void sendLetter(); }
写信过程的具体实现:
package com.teng.pattern.impl; import com.teng.pattern.inter.LetterProcess; /** * 写信过程实现类 * <br>创建日期:2016年6月26日 * <br><b>Copyright 2016 tengxiang All Rights Reserved</b> * @author tengxiang * @since 1.0 * @version 1.0 */ public class LetterProcessImpl implements LetterProcess { @Override public void writeContext(String context) { System.out.println("信的内容:"+ context); } @Override public void fillEnvelope(String address) { System.out.println("信的地址:"+ address); } @Override public void letterIntoEnvelope() { System.out.println("把信放入信封中,并封口。。。"); } @Override public void sendLetter() { System.out.println("发送邮件。。。"); } }
门面模式,增加了一个门面,Client调用时,直接调用门面的方法就可以了,不用了解具体的实现方法以及相关的业务顺序,LetterProcess接口和实现都没有改变,只是增加了一个ModenPostOffice类。
package com.teng.pattern.impl; import com.teng.pattern.inter.LetterProcess; import com.teng.pattern.inter.PoliceCheck; /** * 邮局发件办公室 * <br>创建日期:2016年6月26日 * <br><b>Copyright 2016 tengxiang All Rights Reserved</b> * @author tengxiang * @since 1.0 * @version 1.0 */ public class ModenPostOffice { /** * 寄信过程 */ private LetterProcess letterProcess= new LetterProcessImpl(); private PoliceCheck policeCheck = new PoliceCheckImpl(); /** * 寄信的顺序 * @since 1.0 * @param context context * @param address * <br><b>作者: @author tengxiang</b> * <br>创建时间:2016年6月26日 下午4:25:41 */ public void sendLetter(String context,String address){ //写信的内容 letterProcess.writeContext(context); //写信的地址 letterProcess.fillEnvelope(address); //警察检查信件 policeCheck.check(letterProcess); //将信装在信封中 letterProcess.letterIntoEnvelope(); //发送邮件 letterProcess.sendLetter(); } }
客户只要把信的内容以及收信地址给他们,他们就会把信写好,封好,并发送出去。
package com.teng.pattern.impl; /** * 发件人 * <br>创建日期:2016年6月26日 * <br><b>Copyright 2016 tengxiang All Rights Reserved</b> * @author tengxiang * @since 1.0 * @version 1.0 */ public class Client { /** * @since 1.0 * @param args * <br><b>作者: @author tengxiang</b> * <br>创建时间:2016年6月26日 下午4:30:07 */ public static void main(String[] args){ //现代化的邮局,有这项寄信业务 ModenPostOffice modenPostOffice= new ModenPostOffice(); //讲明 内容、地址 modenPostOffice.sendLetter("开开心心,快快乐乐。。。", "华尔街180号"); } }
注:还有一个警察检查信件的类
package com.teng.pattern.inter; /** * 警察检查接口 * <br>创建日期:2016年6月26日 * <br><b>Copyright 2016 tengxiang All Rights Reserved</b> * @author tengxiang * @since 1.0 * @version 1.0 */ public interface PoliceCheck { /** * @since 1.0 * @param letterProcess * <br><b>作者: @author tengxiang</b> * <br>创建时间:2016年6月26日 下午4:44:07 */ public void check(LetterProcess letterProcess); } package com.teng.pattern.impl; import com.teng.pattern.inter.LetterProcess; import com.teng.pattern.inter.PoliceCheck; /** * 警察检查信件 * <br>创建日期:2016年6月26日 * <br><b>Copyright 2016 tengxiang All Rights Reserved</b> * @author tengxiang * @since 1.0 * @version 1.0 */ public class PoliceCheckImpl implements PoliceCheck { /** * 检查信件 * @since 1.0 * @param letterProcess * <br><b>作者: @author tengxiang</b> * <br>创建时间:2016年6月26日 下午4:37:09 */ @Override public void check(LetterProcess letterProcess){ if(letterProcess!=null){ System.out.println("警察检查通过。。。。。。。。。。。。。。"); } } }
门面模式,是一个很好的封装方法,一个子系统比较复杂的话,比如算法或者业务比较复杂,就可以封装出一个或多个门面出来,项目的结构简单,而且扩展性非常好。
一个类里就一个public方法,所有代码都在里面,然后你就看吧,一大坨的程序,看着能把人逼疯,使用门面模式后,对门面进行单元测试,约束项目成员的代码质量,对项目整体质量的提升也是一个比较好的帮助。
相关文章推荐
- 《您的设计模式》(CBF4LIFE)之“状态模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“访问者模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“工厂方法模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“策略模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“抽象工厂模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“观察者模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“命令模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“代理模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“多例模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“单例模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“组合模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“建造者模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“模板方法模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“桥梁模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“迭代器模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“适配器模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“装饰模式”【整理】
- 《您的设计模式》(CBF4LIFE)之“责任链模式”【整理】
- 关于整理出的设计模式系列各方面学习资料
- 好书整理系列之-设计模式:可复用面向对象软件的基础 3