您的位置:首页 > Web前端

《您的设计模式》(CBF4LIFE)之“门面模式”【整理】

2016-10-27 10:54 387 查看
背景:写信的过程大家都记得吧,先写信的内容,然后写信封,然后把信放到信封中,封好,投递到信箱中进行邮递。

现在邮局开发了一个新业务,你只要把信件的必要信息告诉我,我给你发,我来做这四个过程,只要把信件交个我就成了。

先定义写信的过程接口,定义了写信的四个步骤:

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方法,所有代码都在里面,然后你就看吧,一大坨的程序,看着能把人逼疯,使用门面模式后,对门面进行单元测试,约束项目成员的代码质量,对项目整体质量的提升也是一个比较好的帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式