(七)访问者模式&中介者模式

访问者模式

1、访问者模式介绍

访问者模式是一种将数据操作与数据结构分离的设计模式,访问者是一个接口,它拥有一个visit方法,这个方法对访问到的对象结构中不同类型的元素做出不同的处理,我们可以针对对象结构设计不同的访问者类完成不同的操作,达到区别对待的效果

2、访问者模式的使用场景

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

3、访问者模式的简单示例

Visitor:接口或者抽象类,它定义了对每一个元素访问的行为,它的参数就是可以访问元素,它的方法个数理论上与元素个数是一样的,因此,访问者模式要求元素的类族要稳定,如果经常添加、移除元素类,必然会导致频繁修改Visitor接口,这种情况不适用
ConcreteVistor: 具体访问者,它需要给出对每一个元素类访问时所产生的具体行为
Element:元素接口或者抽象类,它提供接受访问方法的具体实现,而这个具体实现,通常情况下是使用访问者提供的访问该元素类的方法
ObjectStructure 定义当中所提到的对象结构

4、访问者模式简单实现

例如绩效评定中,在员工类中定义一个访问者定义,将访问的操作功能托管给访问类,每个访问者对不同类型的员工调用对应的visit函数实现不同操作

5、Andriod源码中的访问者模式

Andriod的编译注解,核心原理依赖APT,例如有著名的开源库ButterKnife、Dagger、Retrofit,在ElementVistor中定义了多个visit接口,每个接口处理一种元素类型

6、访问者模式优缺点

优点:各角色职责分离,符合单一职责原则
具有优秀拓展性
使得数据结构和作用于结构上的操作解耦,使得操作集合可以独立变化
灵活性
缺点:具体元素对访问者公布细节,具体元素变更时导致修改成本大,违反了依赖倒置原则,为了达到"区别对待"而依赖了具体类,没有依赖抽象

中介者模式

1、中介者模式介绍

中介者相当于现实生活中的中介,没有任何立场的调事佬的角色,具体的定义是包装了一系列对象对象相互对象相互作用的方式,使得这些对象不必相互明显作用

2、中介者模式使用场景

当对象之间的交互操作很多且每个对象的行为操作都依赖彼此时,为防止在修改一个对象的行为时,同时涉及修改很多其他对象的行为,可采用中介者模式,来解决紧耦和问题

3、中介者模式的组成

(1)Mediator: 抽象中介者角色,定义了同事对象到中介者对象的接口
(2)ConcreteMediator: 具体中介者角色,实现父类定义方法,它从具体的同事对象接受信息和发出命令
(3)Colleague: 抽象同事类角色,定义了中介者对象的接口,它只知道中介者而不知道其他的同事对象
(4)具体同事类对象,每个具体同事类都知道本身在小范围内的行为,而不知道它在大范围内的目的

中介者模式中的同事可以在其抽象类定义一个中介者,这样可以保证每一个同事都共有一个中介者

4、Andriod源码中的中介者模式实现

在日常开发中,遇到协调多个交互的对象,需求之间有多UI控件交互的情景,比如当用户名没有输入时,部分按钮不能按,点选自动登录时,记住密码也要勾选上,可以在每个点选按钮时,设置一个change函数,让Activity充当中介者来协调这些控件的状态

5、中介者模式总结

一个类如果与其他类关系错综复杂,那么必然影响我们的代码逻辑以及运行效率,如果不复杂反而使用中介者模式则会使我们原先不复杂的系统变复杂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值