【java设计模式】-11外观模式

1、外观模式概述

外观模式(Facade Pattern)定义了一个高层接口,为子系统中的一组接口提供一个统一访问入口,这个接口使子系统接口更加容易适用。外观模式又称为门面模式,它是一种对象结构型模式。

2、外观模式结构

外观模式包含如下角色:

Facade: 外观角色

SubSystem:子系统角色

在这里插入图片描述

3、外观模式代码实现

/**
 * 外观对象
 *
 * @author kaifeng
 * @date 2018/12/31
 */
public class Facade {

    private SystemA systemA;
    private SystemB systemB;
    private SystemC systemC;

    public Facade() {
        systemA = new SystemA();
        systemB = new SystemB();
        systemC = new SystemC();
    }

    public void wrapOpration() {
        System.out.println(systemA.operationA());
        System.out.println(systemB.operationB());
        System.out.println(systemC.operationC());
    }
}

/**
 * 子系统A
 *
 * @author kaifeng
 * @date 2018/12/31
 */
public class SystemA {
    public String operationA() {
        return "【SystemA】- 我是方法 operationA";
    }
}

/**
 * 子系统B
 *
 * @author kaifeng
 * @date 2018/12/31
 */
public class SystemB {
    public String operationB() {
        return "【SystemB】- 我是方法 operationB";
    }
}

/**
 * 子系统 C
 *
 * @author kaifeng
 * @date 2018/12/31
 */
public class SystemC {
    public String operationC() {
        return "【SystemC】- 我是方法 operationC";
    }
}

客户端调用

public class FacadeDemo {
    public static void main(String[] args) {
        Facade facade=new Facade();
        facade.wrapOpration();
    }
}

【SystemA】- 我是方法 operationA
【SystemB】- 我是方法 operationB
【SystemC】- 我是方法 operationC

4、外观模式优点

  • 对客户端屏蔽子系统组件,减少了客户端处理的对象数目并使得子系统使用起来更加容易。通过引入外观模式,客户端代码将变得很简单,与之关联的对象也很少。

  • 实现了子系统与客户端之间的松耦合关系,这使得子系统的组件变化不会影响到调用它的客户类,只需要调整外观类即可。

  • 降低了大型软件系统中的编译依赖性,并简化了系统在不同平台之间的移植过程,因为编译一个子系统一般不需要编译所有其他的子系统。一个子系统的修改对其他子系统没有任何影响,而且子系统内部变化也不会影响到外观对象。

  • 提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类。

5、外观模式缺点

  • 不能很好地限制客户端使用子系统类,如果对客户端访问子系统类做太多的限制则减少了可变性和灵活性。

  • 在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”。

6、外观模式适用场景

  • 为一个复杂子系统提供一个简单接口时可以使用外观模式。该接口可以满足大多数用户的需求,而且用户也可以越过外观类直接访问子系统。

  • 客户程序与多个子系统之间存在很大的依赖性。引入外观类将子系统与客户以及其他子系统解耦,可以提高子系统的独立性和可移植性。

  • 在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系,而通过外观类建立联系,降低层之间的耦合度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值