门面模式
门面模式:一个子系统的内部和外部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。
角色:1.Facade门面角色:客户端调用这个方法。此角色知道子系统的所有功能。本角色将所有从客户端发出的请求委派到子系统去。该角色本身并没有任何实际功能,只是一个委托类。(不参与子系统的逻辑)
2.subsystem子系统角色:子系统就是功能的执行者。它并不知道门面的存在。对子系统而言,门面角色就是另外一个客户端。
适用场景:为一个复杂的子系统或者模块提供一个外部访问的接口
具体实现:写信有四个过程:写信,写信封,封好,寄出去
通用实现
1.创建子系统接口
/**
* 写信接口
* 子系统
*/
public interface LetterProcess {
public void write(String context); //写信
public void fill(String address); //写信封
public void letter(); //封好
public void send(); //邮寄
}
2.创建子系统实现类
/**
* 写信实现类
*/
public class LetterProcessImpl implements LetterProcess{
@Override
public void write(String context) {
System.out.println("信的内容:"+context);
}
@Override
public void fill(String address) {
System.out.println("信的封面:"+address);
}
@Override
public void letter() {
System.out.println("封好信封");
}
@Override
public void send() {
System.out.println("寄出去");
}
}
3.创建门面角色
/**
* 邮局
* 门面角色
* 一般门面角色不负责功能的执行顺序
* 对于这种要按顺序执行的,一般用一个类封装好了再交给门面处理
* 这里就不封装了,直接在门面里面确定顺序
*/
public class ModenPostOffice {
private LetterProcess letterProcess = new LetterProcessImpl();
//写信一体化,直接完成整个过程
public void sendLetter(String context,String address){
letterProcess.write(context);
letterProcess.fill(address);
letterProcess.letter();
letterProcess.send();
}
}
4.创建场景测试类
/**
* 场景测试类
*/
public class Client {
public static void main(String[] args) {
ModenPostOffice modenPostOffice = new ModenPostOffice();
String context = "你好,远方的人";
String address = "天堂路119号";
modenPostOffice.sendLetter(context,address);
}
}