Android设计模式-15-访问者模式

1. 定义

  • 封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作
  • 将数据操作与数据结构分离

2. 使用场景

  1. 对象结构比较稳定,但经常需要在此对象结构上定义新的操作
  2. 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免这些操作污染这些对象的类,也不希望在增加新操作时修改这些类

3. 优缺点

  • 优点:
  1. 符合单一职责原则
  2. 优秀的扩展性
  3. 灵活性
  • 缺点:
  1. 具体元素对访问者公布细节,违反了迪米特原则
  2. 具体元素变更比较困难
  3. 违反了依赖倒置原则,依赖了具体类,没有依赖抽象

4. Android源码中的使用

Android中编译期注解(依赖APT(Annotation Processing Tools)实现), 其内部就有使用访问者模式,Element及其子类(包元素PackageElement,类型元素TypeElement等)是被访问者,其中的accept方法接收一个ElementVisitor类型的访问者,ElementVisitor中有多个visit方法处理不同类型的元素, 比较著名的ButterKnife,Dagger,Retrofit等开源库都有使用编译期注解实现

5. 实例演示

  • 访问者模式并不常用,其关键点在于: 在数据基础类(被访问者)里面有一个方法,接受访问者,将自身引用传入访问者,以供调用;
  • 以员工绩效评定为例,人事主管和技术主管考核的点是不同的,人事主管对所有员工的考核方式都是看kpi,而技术主管考核员工则不同,如对于程序员是看代码量,对于产品经理是看产品数量(以上只是简单的设定一下代码逻辑,并不代表真实情况)

1.1 首先创建一个员工基类(被访问者)

1.2 两个员工的实现类:工程师类和产品经理类

2.1 创建一个访问者基类

2.2 两个访问者实现类, 人事主管和技术主管

3. 创建一个员工的集合类,相当于现实中的业绩报表

4. 创建实例进行调用

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android设计模式是在Android应用程序开发中常用的一些软件设计模式的应用集合。这些设计模式可以帮助开发者解决一些常见的问题,提高代码的可维护性、可扩展性和可重用性。 以下是一些常见的Android设计模式: 1. MVC(Model-View-Controller)模式:将应用程序分为模型、视图和控制器三个部分,实现了业务逻辑和界面的分离。模型负责数据的处理和存储,视图负责展示界面,控制器负责处理用户的输入和业务逻辑的处理。 2. MVP(Model-View-Presenter)模式:在MVC模式的基础上,将控制器改为Presenter,负责处理视图和模型之间的交互。Presenter通过接口与视图进行通信,将视图的操作转发给模型进行处理。 3. MVVM(Model-View-ViewModel)模式:在MVP模式的基础上,引入了ViewModel层,负责处理视图和模型之间的数据绑定。ViewModel将模型的数据转换为视图所需的数据,并通过数据绑定机制将其绑定到视图上。 4. 单例模式:确保一个类只有一个实例,并提供一个全局的访问点。在Android开发中,常用于管理全局的资源或状态,例如Application类。 5. 观察者模式:定义了对象之间的一对多依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都会收到通知并自动更新。在Android开发中,常用于实现事件的发布和订阅机制。 6. 适配器模式:将一个类的接口转换成客户端所期望的另一个接口。在Android开发中,常用于将不同的组件或类适配成统一的接口,例如RecyclerView的Adapter。 这些设计模式可以根据具体的需求和场景进行选择和组合使用,以提高代码的质量和开发效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值