设计模式:访问者模式(Visitor Pattern)
生活随笔
收集整理的这篇文章主要介绍了
设计模式:访问者模式(Visitor Pattern)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
访问者模式(Visitor Pattern): 封装一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。
主要将数据结构与数据操作分离,解决数据结构和操作耦合性问题。
访问者模式的基本工作原理: 在被访问的类里面加一个对外提供接待访问者的接口。
public abstract class Action {public abstract void getManResult(Man man);public abstract void getWomanResult(Woman woman); }public class Fail extends Action{@Overridepublic void getManResult(Man man) {System.out.println("男人评价该歌手很失败");}@Overridepublic void getWomanResult(Woman woman) {System.out.println("女人评价该歌手很失败");} }public class Success extends Action{@Overridepublic void getManResult(Man man) {System.out.println("男人评价该歌手很成功");}@Overridepublic void getWomanResult(Woman woman) {System.out.println("女人评价该歌手很成功");} }public abstract class Person {public abstract void accept(Action action); }// 1. 这里使用了双分派, 首先在客户端程序中, 将具体状态作为参数传递给woman(第一次分派) // 2. 然后Woman类调用作为参数的"具体方法"中方法getWomanResult,同时将自己(this)作为参数 // 传入(第2次分派) public class Woman extends Person{@Overridepublic void accept(Action action) {action.getWomanResult(this);} }public class Man extends Person{@Overridepublic void accept(Action action) {action.getManResult(this);} }import java.util.LinkedList; import java.util.List;public class ObjectStructure {// 维护了一个集合private List<Person> persons = new LinkedList<Person>();// 增加到listpublic void attach(Person p){persons.add(p);}// 移除public void remove(Person p){persons.remove(p);}// 显示测评情况public void display(Action action){for(Person p : persons){p.accept(action);}} }public class Client {public static void main(String[] args){ObjectStructure objectStructure = new ObjectStructure();objectStructure.attach(new Man());objectStructure.attach(new Woman());Success success = new Success();objectStructure.display(success);} }
总结
以上是生活随笔为你收集整理的设计模式:访问者模式(Visitor Pattern)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 数据结构:回溯--解决八皇后问题
- 下一篇: 设计模式:迭代器模式(Iterator