Android设计模式-22-外观模式

1. 定义

  • 隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口
  • 通过创建一个统一的类,用来包装子系统中一个或多个复杂的类
    (由外观类去保存各个子系统的引用,实现由一个统一的外观类去包装多个子系统类,然而客户端只需要引用这个外观类,然后由外观类来调用各个子系统中的方法)

2. 使用场景

1. 为复杂的模块或子系统提供外界访问的接口

2. 子系统相对独立

3. 预防低水平人员带来的风险

3. 优缺点

  • 优点:
  • 1. 降低了客户类与子系统类的耦合度,实现松耦合关系2. 对客户屏蔽了子系统组件,从而简化了接口,减少了客户处理的对象数目并使子系统的使用更加简单。3. 降低原有系统的复杂度和系统中的编译依赖性,并简化了系统在不同平台之间的移植过程
  • 缺点:
  • 1. 在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”2. 不能很好地限制客户使用子系统类,如果对客户访问子系统类做太多的限制则减少了可变性和灵活性。

4. Android源码中的使用:

Context封装了很多操作,如startActivity(),sendBroadcast(),bindServiced()等,相当于抽象外观类,Context的子系统中去实现这些方法,如ActivityManagerService实现startActivity(),PackageManagerService实现包信息相关方法,ContextImpl则是Context的实现类,也就是外观类,其内部调用这些子系统的实现,而Activity相当于客户端,其上两层父类ContextWrapper中有个一个Context类型的mBase字段,其实际类型是ContextImpl,是对外观类的调用,例如ContextWrapper中:

5. 实例演示

以智能家居,统一管理家电为例

1. 各种家电作为子系统,如灯,电视,空调等

2. 智能遥控器作为外观类(现在很多有红外功能的Andorid手机都有智能遥控器app, 比如我常用的遥控精灵就挺好用,不用再去抱着一大堆的各种遥控器)

3. 通过外观类去操作各子系统

我是今阳,如果想要进阶和了解更多的干货,欢迎关注公众号”今阳说“接收我的最新文章

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值