参考:设计模式之禅
门面模式模式
好,我们继续讲课。大家都是高智商的人,都写过纸质的信件吧,比如给女朋友写情书什么的,写信
的过程大家都还记得吧,先写信的内容,然后写信封,然后把信放到信封中,封好,投递到信箱中进行邮
递,这个过程还是比较简单的,虽然简单,这四个步骤都是要跑的呀,信多了还是麻烦,比如到了情人节,
为了大海捞针,给十个女孩子发情书,都要这样跑一遍,你不要累死,更别说你要发个广告信啥的,一下
子发 1 千万封邮件,那不就完蛋了?那怎么办呢?还好,现在邮局开发了一个新业务,你只要把信件的必
要信息高速我,我给你发,我来做这四个过程,你就不要管了,只要把信件交给我就成了。
类图
实现
1. 定义一个写信的过程
package DesignModel_7;
public interface LetterProcess {
//首先要写信的内容
public void writeContext(String context);
//其次写信封
public void fillEnvelope(String address);
//把信放到信封里
public void letterInotoEnvelope();
//然后邮递
public void sendLetter();
}
2. 写信的具体实现
package DesignModel_7;
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 letterInotoEnvelope() {
System.out.println("把信放到信封中....");
}
@Override
public void sendLetter() {
System.out.println("邮递信件...");
}
}
3. 定义现代化的邮局
package DesignModel_7;
public class ModenPostOffice {
private LetterProcess letterProcess = new LetterProcessImpl();
// private Police letterPolice = new Police();
//写信,封装,投递,一体化了
public void sendLetter(String context,String address){
//帮你写信
letterProcess.writeContext(context);
//写好信封
letterProcess.fillEnvelope(address);
//警察要检查信件了
// letterPolice.checkLetter(letterProcess);
//把信放到信封中
letterProcess.letterInotoEnvelope();
//邮递信件
letterProcess.sendLetter();
}
}
4. 定义–
package DesignModel_7;
public class Client {
public static void main(String[] args) {
//创建一个处理信件的过程
LetterProcess letterProcess = new LetterProcessImpl();
//开始写信
letterProcess.writeContext("Hello,It's me,do you know who I am? I'm your old lover. I'd like to....");
//开始写信封
letterProcess.fillEnvelope("Happy Road No. 666,God Province,Heaven");
//把信放到信封里,并封装好
letterProcess.letterInotoEnvelope();
//跑到邮局把信塞到邮箱,投递
letterProcess.sendLetter();
//现代化的邮局,有这项服务,邮局名称叫Hell Road
ModenPostOffice 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);
}
}
运行结果
填写信的内容....Hello,It's me,do you know who I am? I'm your old lover. I'd like to....
填写收件人地址及姓名....Happy Road No. 666,God Province,Heaven
把信放到信封中....
邮递信件...
填写信的内容....Hello,It's me,do you know who I am? I'm your old lover. I'd like to....
填写收件人地址及姓名....Happy Road No. 666,God Province,Heaven
把信放到信封中....
邮递信件...