设计模式之外观模式(Facade)

定义:外观模式是软件工程中常用的一种软件设计模式。它为子系统中的一组接口提供一个统一的高层接口。这一接口使得子系统更加容易使用。

controller和dao之间的service层就是facade.

先定三个接口

public interface Sub1 {
    void function1();
}
public interface Sub2 {
    void function2();
}
public interface Sub3 {
    void function4();
}

添加实现

public class Sub1Impl implements Sub1 {
    @Override
    public void function1() {
        System.out.println("子系统中Sub1接口的功能");
    }
}
public class Sub2Impl implements Sub2 {
    @Override
    public void function2() {
        System.out.println("子系统中Sub2接口的功能");
    }
}
public class Sub3Impl implements Sub3 {
    @Override
    public void function3() {
        System.out.println("子系统中Sub3接口的功能");
    }
}

定义外观接口

public interface Facade {
    /*  下面随便组装几个功能  */

    void function12();

    void function23();

    void function123();
}

实现外观接口

public class FacadeImpl implements Facade {

    private Sub1 sub1;

    private Sub2 sub2;

    private Sub3 sub3;

    public FacadeImpl() {
        super();
        this.sub1 = new Sub1Impl();
        this.sub2 = new Sub2Impl();
        this.sub3 = new Sub3Impl();
    }

    public FacadeImpl(Sub1 sub1, Sub2 sub2, Sub3 sub3) {
        super();
        this.sub1 = sub1;
        this.sub2 = sub2;
        this.sub3 = sub3;
    }

    @Override
    public void function12() {
        sub1.function1();
        sub2.function2();
    }

    @Override
    public void function23() {
        sub2.function2();
        sub3.function3();
    }

    @Override
    public void function123() {
        sub1.function1();
        sub2.function2();
        sub3.function3();
    }
}

测试

public class Test {
    public static void main(String[] args) {
        Facade facade = new FacadeImpl();
        facade.function12();
        System.out.println("-------------------------");
        facade.function23();
        System.out.println("-------------------------");
        facade.function123();

        /*  以上为使用了外观模式的调用方式,以下为原始方式   */

        System.out.println("-------------以下原始方式--------------");
        Sub1 sub1 = new Sub1Impl();
        Sub2 sub2 = new Sub2Impl();
        Sub3 sub3 = new Sub3Impl();
        sub1.function1();
        sub2.function2();
        System.out.println("-------------------------");
        sub2.function2();
        sub3.function3();
        System.out.println("-------------------------");
        sub1.function1();
        sub2.function2();
        sub3.function3();
    }
}

结果

子系统中Sub1接口的功能
子系统中Sub2接口的功能
-------------------------
子系统中Sub2接口的功能
子系统中Sub3接口的功能
-------------------------
子系统中Sub1接口的功能
子系统中Sub2接口的功能
子系统中Sub3接口的功能
-------------以下原始方式--------------
子系统中Sub1接口的功能
子系统中Sub2接口的功能
-------------------------
子系统中Sub2接口的功能
子系统中Sub3接口的功能
-------------------------
子系统中Sub1接口的功能
子系统中Sub2接口的功能
子系统中Sub3接口的功能

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值