欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > asp.net >内容正文

asp.net

设计模式:访问者模式(Visitor Pattern)

发布时间:2025/6/15 asp.net 44 豆豆
生活随笔 收集整理的这篇文章主要介绍了 设计模式:访问者模式(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)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。