行为型模式-访问者模式
利用多态特性(父类型的引用指向子类型的对象。用一句比较通俗的话:同一操作作用于不同的对象,可以产生不同的效果。这就是多态。)
多态有什么好处?有两个好处:
1. 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。//继承
2. 派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。 //多态的真正作用,
多态在什么地方用?
可以用在方法的参数中和方法的返回类型中。
访问者模式:
在访问者莫模式中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。
表示作用于某对象结构中的各元素的操作。可以使在不改变各元素类的前提下定义用作于这些元素的新操作。
结构对象是使用访问者模式必备条件,而且这个结构对象必须存在遍历自身各个对象的方法。
意图:主要将数据结构与数据操作分离。
主要解决:稳定的数据结构和易变的操作耦合问题。
关键代码:在数据基础类里面有一个方法接受访问者,将自身引用传入访问者。
优点:
1,符合单一职责原则。
2.优秀的扩展性。
3.灵活性。
缺点:
1,具体元素对访问者公布细节,违反了迪米特原则。
2.具体元素变更比较困难。
3.违反了依赖倒置原则,依赖了具体类,没有依赖抽象。
角色:
1、抽象访问者(Visitor):为该对象结构中具体元素角色声明一个访问操作接口。该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色,这样访问者就可以通过该元素角色的特定接口直接访问它;
2、具体访问者(Concrete Visitor):实现Visitor声明的接口;
3、抽象元素(Element):定义一个接受访问操作,它以一个访问者(Visitor)作为参数;
4、具体元素(Concrete Element ):实现了抽象元素所定义的接受操作接口;
5、结构对象(Object Structure):可以提供一个高层接口以允许访问者访问它的元素。
访问者模式