外观模式-统一的编程接口

外观模式定义

       为子系统的各个接口提供一个统一的界面,提供一个高层的接口,对外隐藏内部实现和调用关系,使得子系统更容易使用。

符合的设计模式原则

       最少知道原则(迪米特法则),里氏替换原则,依赖倒置原则

外观模式UML类图这里写图片描述

       在类图中可以看出,Facede是系统对外的统一接口,用于封装内部的实现,并和外界进行交互。interfaceA,interfaceB,interfaceC为Facede依赖的接口,他们负责具体的实现,并且内部可能有相关调用关系,使用外观模式,使得内部逻辑对用户透明,用户只需要使用Facede就可以了。

外观模式举例说明

public interface Facede {
    void operation1();
    void operation2();
    void operation3();
}


public class FacedeImpl implement Facede{

    private InterfaceA mInterfaceA = new InterfaceAImpl();
    private InterfaceB mInterfaceB = new InterfaceBImpl();
    private InterfaceC mInterfaceC = new InterfaceCImpl();

    @Override
    void operation1() {
        mInterfaceA.realOperation1();
    } 

    @Override
    void operation2() {
        mInterfaceB.realOperation2();
    }

    @Override
    void operation3() {
        mInterfaceC.realOperation3();
    }
}

      以上代码中,Facede作为高层接口,用来提供统一的接口,FacedeImpl实现Facede,Facede是外观类,它依赖具体的子系统接口,并调用子系统的方法,用来实现具体的功能,并封装内部逻辑细节。我们可以发现,在这个例子中,Facede只是定义了一系列的接口,但是他的实现类并没有直接实现这些功能,而是调用了各个子系统的方法来实现的功能。它的作用类似于调度器或者总线,协调各个子系统的运转。

外观模式使用场景

      当要为一个复杂的系统提供一个简单的接口的时候可以使用,比如封装SDK,网络库,图片加载库等。关键一点就是,当内部比较复杂,需要提供一个简单的统一接口的时候就可以使用。

外观模式在Android源码中的实现

      Context在Android中使用广泛,它封装了很多的重要操作。比如startActivity,sendBroadcast,调用系统资源等。它是一个抽象类,具体功能由ContextImpl实现,但是ContextImpl不具备实现这些功能的能力,在它的内部调用了其他的类(子系统)来实现具体的功能,比如调用ActivityManagerService实现startActivity。可以看出,这是典型的外观模式的运用,Context提供统一的高层接口,具体功能由子系统实现。具体内容可以查阅Context,ContextImpl相关源码。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旅行者40

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值