• 欢迎来到本博客,希望可以y一起学习与分享

PHP设计模式——访问者模式

PHP benz 4年前 (2017-12-19) 126次浏览 0个评论 扫描二维码

访问者模式表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。

UML类图:

角色:

1.抽象访问者(State):为该对象结构中具体元素角色声明一个访问操作接口。该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色,这样访问者就可以通过该元素角色的特定接口直接访问它。
2.具体访问者(Success):实现访问者声明的接口。
3.抽象元素(Person):定义一个接受访问操作accept(),它以一个访问者作为参数
4. 具体元素(Man):实现了抽象元素所定义的接受操作接口。
5.结构对象(ObjectStruct):这是使用访问者模式必备的角色。它具备以下特性:能枚举它的元素;可以提供一个高层接口以允许访问者访问它的元素;如有需要,可以设计成一个复合对象或者一个聚集(如一个列表或无序集合)

核心代码:

测试客户端代码:

适用场景及优势:

1) 一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作。
2) 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而你想避免让这些操作“污染”这些对象的类。Visitor模式使得你可以将相关的操作集中起来定义在一个类中。
3) 当该对象结构被很多应用共享时,用Visitor模式让每个应用仅包含需要用到的操作。
4) 定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。改变对象结构类需要重定义对所有访问者的接口,这可能需要很大的代价。如果对象结构类经常改变,那么可能还是在这些类中定义这些操作较好。


文章 PHP设计模式——访问者模式 转载需要注明出处
喜欢 (0)

您必须 登录 才能发表评论!