小白谈谈门面模式

概念

门面模式就是所谓的外观模式(Facade Pattern),用于隐藏系统的复杂性,只给客户端提供一个可以访问系统的接口。

介绍

如何理解:我拿一个案例来进行解释,在我们毕业季,都会有毕业论文吧,完成毕业论文是不是得经历这样一个过程:选题➡查阅文献➡编写论文➡提交,虽然这个过程比较简单,但是万一我双专业,或者读研读博,那么这四个步骤还是要每一步都要跑上好几次,假如有一家空壳公司提供这样一个系统,你只用把你的专业告诉我,我就能帮你完成毕业论文,我来帮你完成这个步骤,其中的过程你不用管,即学生只用单一地访问这个业务,而具体操作则被公司封装起来了,这就是门面模式。

优点:
1、减少系统相互依赖
2、提高灵活性
3、提高安全性

**缺点:**不符合开闭原则,如果要改东西会很麻烦,继承重写都不合适

实现

代码实现:
首先声明一个写论文过程的接口:

/**
 * 定义一个完成毕业论文的过程
 */
public interface Thesis {

    //首先定义选题
    public void choose(String title);

    //查阅文献
    public void read(String context);

    //编写论文
    public void write();

    //提交论文
    public void commit();
}

再写这个过程的实现:

/**
 * 写论文的具体实现
 */
public class FinishThesis implements Thesis {
    @Override
    public void choose(String title) {
        System.out.println("我要选的题目是...." + title);
    }

    @Override
    public void read(String context) {
        System.out.println("我要查阅的文献是..." + context);
    }

    @Override
    public void write() {
        System.out.println("我要开始写....");
    }

    @Override
    public void commit() {
        System.out.println("提交完成");
    }
}

在这种情况下,客户端如果要进行操作的话,代码显示十分复杂:

public class Student {

    public static void main(String[] args) {

        //实例化一个写论文的过程
        Thesis thesis = new FinishThesis();

        //写论文的四个过程
        thesis.choose("java");
        thesis.read("java");
        thesis.write();
        thesis.commit();
    }
}

因此引入一家空客公司,完成这个过程的操作:

public class Business {

    //实例化一个写论文的过程
    private Thesis thesis = new FinishThesis();

    public void operate(String subject){

        //帮你选题
        thesis.choose(subject);

        //帮你查阅文献
        thesis.read(subject);

        //帮你编写论文
        thesis.write();

        //帮你提交论文
        thesis.commit();
    }
}

这个时候客户端的代码会显得十分简单:

public class Student {

    public static void main(String[] args) {

        //引入这家公司
        Business business = new Business();

        //填写自己的专业
        String subject = "java";

        //告诉公司,申请这个业务
        business.operate(subject);
    }
}

假如说现在规定,论文还需要进行查重操作,则直接在公司类上进行添加即可,客户是不用进行了解的:

/**
 * 定义一个完成毕业论文的过程
 */
public interface Thesis {

    //首先定义选题
    public void choose(String title);

    //查阅文献
    public void read(String context);

    //编写论文
    public void write();

    //进行论文查重
    public void check();

    //提交论文
    public void commit();
}

/**
 * 写论文的具体实现
 */
public class FinishThesis implements Thesis {
    @Override
    public void choose(String title) {
        System.out.println("我要选的题目是...." + title);
    }

    @Override
    public void read(String context) {
        System.out.println("我要查阅的文献是..." + context);
    }

    @Override
    public void write() {
        System.out.println("我要开始写....");
    }

    //进行论文查重
    @Override
    public void check(){
        System.out.println("查重中......");
    }

    @Override
    public void commit() {
        System.out.println("提交完成");
    }
}
public class Business {

    //实例化一个写论文的过程
    private Thesis thesis = new FinishThesis();

    public void operate(String subject){

        //帮你选题
        thesis.choose(subject);

        //帮你查阅文献
        thesis.read(subject);

        //帮你编写论文
        thesis.write();

        //帮你论文查重
        thesis.check();

        //帮你提交论文
        thesis.commit();
    }
}

本文的代码:https://pan.baidu.com/s/1qGXVkMh-iOAG9A8bpYTWfA
提取码:yffw

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值