设计模式原来这么简单-门面模式(Facade)

1.什么是门面模式

为一个子系统中的一系列接口提供一个统一的接口。外观定义了一个更高级别的接口以便子系统更容易使用。

2.实例

例如一个项目需要的人员有产品经理、研发经理、前端、后端、测试等共同协作来完成,而从甲方的角度看来只需要拿钱启动项目最后验收项目即可

3.程序示例
public interface IProjectWorker {

    void startDailyWork();

    void pauseToRest();

    void endDailyWork();

    String getName();
}
public abstract class BaseProjectWorker implements IProjectWorker{
    private String name;
    protected BaseProjectWorker(String name){
        this.name = name;
    }

    @Override
    public String getName() {
        return name;
    }
}
public class FrontProgrammer extends BaseProjectWorker{

    protected FrontProgrammer(String name) {
        super(name);
    }

    @Override
    public void startDailyWork() {
        System.out.println("[FrontProgrammer] 开始编写前端页面");
    }

    @Override
    public void pauseToRest() {
        System.out.println("[FrontProgrammer] 休息去喝咖啡");
    }

    @Override
    public void endDailyWork() {
        System.out.println("[FrontProgrammer] 结束编写前端页面");
    }
}
public class BackProgrammer extends BaseProjectWorker{

    protected BackProgrammer(String name) {
        super(name);
    }

    @Override
    public void startDailyWork() {
        System.out.println("[FrontProgrammer] 开始编写后端页面");
    }

    @Override
    public void pauseToRest() {
        System.out.println("[FrontProgrammer] 休息去喝茶");
    }

    @Override
    public void endDailyWork() {
        System.out.println("[FrontProgrammer] 结束编写后端页面");
    }

}
public class TestProgrammer extends BaseProjectWorker{

    protected TestProgrammer(String name) {
        super(name);
    }

    @Override
    public void startDailyWork() {
        System.out.println("[TestProgrammer] 开始测试");
    }

    @Override
    public void pauseToRest() {
        System.out.println("[TestProgrammer] 休息去喝咖啡");
    }

    @Override
    public void endDailyWork() {
        System.out.println("[TestProgrammer] 结束测试");
    }
}
public class ProjectFacade {
    private List<IProjectWorker> workers;
    public ProjectFacade(){
        workers = new ArrayList<>();
        workers.add(new FrontProgrammer("一号前端"));
        workers.add(new FrontProgrammer("二号前端"));
        workers.add(new BackProgrammer("一号后端"));
        workers.add(new BackProgrammer("二号后端"));
        workers.add(new BackProgrammer("三号后端"));
        workers.add(new TestProgrammer("一号测试"));
    }

    public void startProject(){
    	System.out.println("[Boss] 不完成项目不准休息^o`");
        workers.forEach(IProjectWorker::startDailyWork);
    }

    public void endProject(){
        workers.forEach(IProjectWorker::endDailyWork);
    }
}
4.测试
@Test
public void test(){
    // 同样也是提供给用户的接口
    ProjectFacade projectFacade = new ProjectFacade();

    projectFacade.startProject();

    projectFacade.endProject();
}
5.测试输出

[Boss] 不完成项目不准休息^o`
[FrontProgrammer] 开始编写前端页面
[FrontProgrammer] 开始编写前端页面
[FrontProgrammer] 开始编写后端页面
[FrontProgrammer] 开始编写后端页面
[FrontProgrammer] 开始编写后端页面
[TestProgrammer] 开始测试
[FrontProgrammer] 结束编写前端页面
[FrontProgrammer] 结束编写前端页面
[FrontProgrammer] 结束编写后端页面
[FrontProgrammer] 结束编写后端页面
[FrontProgrammer] 结束编写后端页面
[TestProgrammer] 结束测试

6.总结

接口的多个子类完成一项工作的时候适合使用门面模式的思想去封装下,提高了系统的易用性和用户的产品体验

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值