常用的设计模式(七)——门面设计模式
2015-11-13 15:19
363 查看
随着系统的不断改进和开发,它们会变得越来越复杂,系统会生成大量的类,这使得程序流程更难被理解。门面模式可为这些类提供一个简化的接口,从而简化访问这些类的复杂性。门面模式(Facade)也被称为正面模式、外观模式,这种模式用于将一组复杂的类包装到一个简单的外部接口中。
public interface LetterProcess {//首先要写信的内容public void writeContext(String context);//其次写信封public void fillEnvelope(String address);//把信放到信封里public void letterInotoEnvelope();//然后邮递public void sendLetter();}写信过程的具体实现:
public class LetterProcessImpl implements LetterProcess {//写信public void writeContext(String context) {System.out.println("填写信的内容...." + context);}//在信封上填写必要的信息public void fillEnvelope(String address) {System.out.println("填写收件人地址及姓名...." + address);}//把信放到信封中,并封好public void letterInotoEnvelope() {System.out.println("把信放到信封中....");}//塞到邮箱中,邮递public void sendLetter() {System.out.println("邮递信件...");}}
public class ModenPostOffice {private LetterProcess letterProcess = new LetterProcessImpl();//写信,封装,投递,一体化了public void sendLetter(String context,String address){//帮你写信letterProcess.writeContext(context);//写好信封letterProcess.fillEnvelope(address);//把信放到信封中letterProcess.letterInotoEnvelope();//邮递信件letterProcess.sendLetter();}}测试用例
public class Client {public static void main(String[] args) {//现代化的邮局,有这项服务,邮局名称叫Hell RoadModenPostOffice hellRoadPostOffice = new ModenPostOffice();//你只要把信的内容和收信人地址给他,他会帮你完成一系列的工作;String address = "Happy Road No. 666,God Province,Heaven"; //定义一个地址String context = "Hello,It's me,do you know who I am? I'm your old lover.I'd like to....";hellRoadPostOffice.sendLetter(context, address);}}门面模式讲解完毕,这是一个很好的封装方法,一个子系统比较复杂的实话,比如算法或者业务比较复杂,就可以封装出一个或多个门面出来,项目的结构简单,而且扩展性非常好。还有,在一个较大项目中的时候,为了避免人员带来的风险,也可以使用这个模式,技术水平比较差的成员,尽量安排独立的模块(Sub System), 然后把他写的程序封装到一个门面里,尽量让其他项目成员不用看到这些烂人的代码,看也看不懂,我也遇到过一个“高人”写的代码,private 方法、构造函数、常量基本都不用,你要一个public方法,好,一个类里就一个 public 方法,所有代码都在里面,然后你就看吧,一大坨的程序,看着能把人逼疯,使用门面模式后,对门面进行单元测试,约束项目成员的代码质量,对项目整体质量的提升也是一个比较好的帮助。
相关文章推荐
- 安装jar文件到maven 本地库
- TinyXML:一个优秀的C++ XML解析器
- IOS中的网络编程详解
- redis初试牛刀
- [国嵌攻略][056][串口驱动程序设计]
- 经典SQL语句大全
- 动态调整UILabel的高度或宽度
- fullfile函数作用
- Mac下配置iterm2和oh-my-zsh
- Android的init过程(二):初始化语言(init.rc)解析
- Rotativa 转换html 为pdf时遇到的问题
- Spring MVC + JSON = 406 Not Acceptable
- 面向过程设计和面向对象设计之间区别的实例
- JSP文件上传--FileUpload组件
- compass项目监控文件报 /usr/bin/env 找不到文件
- Rotativa 转换html 为pdf时遇到的问题
- 通过Unity实现手机本地模型(obj)的读取
- Spring Cache
- [LintCode] Expression Evaluation
- YUV主要采样格式理解