门面模式【Facade Pattern】
大家都是高智商的人,都写过纸质的信件吧,比如给女朋友写情书什么的,写信
的过程大家都还记得吧,先写信的内容,然后写信封,然后把信放到信封中,封好,投递到信箱中进行邮
递,这个过程还是比较简单的,虽然简单,这四个步骤都是要跑的呀,信多了还是麻烦,比如到了情人节,
为了大海捞针,给十个女孩子发情书,都要这样跑一遍,你不要累死,更别说你要发个广告信啥的,一下
子发 1 千万封邮件,那不就完蛋了?那怎么办呢?还好,现在邮局开发了一个新业务,你只要把信件的必
要信息高速我,我给你发,我来做这四个过程,你就不要管了,只要把信件交给我就成了。
在这中环境下,最累的是写信的人,为了发送一封信出去要有四个步骤,而且这四个步骤还不能颠倒,你不可能没写信就把信放到信封吧,写信的人要知道这四个步骤,而且还要知道这四个步骤的顺序,怖吧,我们先看看这个过程如何表现出来的:先看写信的过程接口,定义了写信的四个步骤:
接口
package com.wanggs.facade;
/**
* Created by wanggs on 2017/7/16.
*/
public interface LetterProcess {
// 写信的内容
public abstract void writeContext(String context);
// 写信封
public abstract void fillEnvelope(String address);
// 把信放到信封类
public abstract void letterInotoEnvelope();
// 邮寄
public abstract void senderLetter();
}
实现类
package com.wanggs.facade;
/**
* Created by wanggs on 2017/7/16.
*/
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 senderLetter() {
System.out.println("邮递信件...");
}
}
替代
package com.wanggs.facade;
/**
* Created by wanggs on 2017/7/16.
*/
public class ModenPostOffice {
LetterProcess letterProcess = new LetterProcessImpl();
public void sendLetter(String context,String address){
letterProcess.writeContext(context);
letterProcess.fillEnvelope(address);
letterProcess.letterInotoEnvelope();
letterProcess.senderLetter();
}
}
测试
package com.wanggs.facade;
import com.sun.org.apache.xpath.internal.operations.Mod;
/**
* Created by wanggs on 2017/7/16.
*/
public class Client {
public static void main(String[] args) {
//改进前
/* LetterProcess letterProcess = new LetterProcessImpl();
letterProcess.writeContext("范雅静");
letterProcess.fillEnvelope("郑州");
letterProcess.letterInotoEnvelope();
letterProcess.senderLetter();*/
ModenPostOffice modenPostOffice = 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....";
modenPostOffice.sendLetter(context,address);
}
}