- 浏览: 1259971 次
- 性别:
- 来自: 常州
文章分类
- 全部博客 (499)
- java (101)
- linux (82)
- mysql (30)
- javascript (45)
- Oracle (12)
- ext (14)
- 虚拟机 (1)
- 搜索引擎 (2)
- struts2 (11)
- 设计模式 (9)
- nginx (17)
- tomcat (12)
- 随想 (10)
- spring (18)
- svn (1)
- flash (3)
- UML (1)
- 数据结构 (7)
- 算法 (2)
- 网摘 (9)
- 数据库 (15)
- ibatis (3)
- jquery (31)
- lucene (1)
- hibernate (14)
- Myeclipse (4)
- 线程 (7)
- jbpm (4)
- 重构 (1)
- mantis (3)
- MediaWiki (4)
- ExtMail (1)
- MDaemon (1)
- egit (1)
- dwr (7)
- sitemesh (2)
- mybatis (1)
- ico (1)
- hadoop (5)
- jsoup (1)
- urlrewrite (2)
- jstl (1)
- spring3 (2)
- aop (2)
- 定时器 (1)
- Quartz (2)
- apache (1)
- php (1)
- security (1)
- iptables (2)
- QQ (1)
- mysqldump (1)
- vim (1)
- memcached (4)
- jad (1)
- 微博 (1)
- html5 (1)
- css3 (1)
- httpclient (10)
- google (1)
- shortUrl (1)
- json (2)
- virtualBox (1)
- mantisBT (2)
- htmlunit (1)
- selenium (2)
- mail (1)
- 正则表达式 (4)
- html (3)
- css (2)
- jatoolsPrinter (1)
- 图片处理 (1)
- hql (1)
- webservice (1)
- 分词 (3)
- 短信 (1)
- VPS (1)
- 事务 (1)
- 广告 (1)
- 画廊 (1)
- git (3)
- github (1)
- openshift (1)
- 缓存 (1)
- web (3)
- android (3)
- c3p0 (1)
- 邮箱 (1)
- memcache (2)
- windows (2)
- js (14)
- 编辑器 (1)
- 打印 (1)
- centos (5)
- boneCP (1)
- 连接池 (1)
- sql (1)
- nosql (1)
- MongoDB (1)
- 浏览器 (1)
- node (1)
- node.js (1)
- backbone.js (1)
- lazyload (1)
- Switch Off (1)
- Titanium (1)
- 网站架构 (1)
- WebDriver (1)
- APJP (1)
- 代理 (1)
- comet (1)
- kendoui (1)
- UI (2)
- 互联网 (1)
- localStorage (1)
- 记录 (1)
- 微信 (2)
- Sphinx (1)
- netty (1)
- js,mvvm,Avalon (1)
- 安卓 (1)
- Tengine (1)
- 大数据 (1)
- 手机 (1)
- paypal (1)
- SaaS (1)
- gitlab (1)
- nodejs (1)
- React (1)
- shadowsocks (0)
- vpn (0)
- 验证码 (1)
- SSL (2)
- SEO (1)
- IntelliJ (1)
- 敏捷开发 (1)
- 项目管理 (1)
- 爬虫 (1)
- 正则 (1)
- owncloud (1)
- 云存储 (1)
- ajax (1)
- pjax (1)
- jdk (1)
- zookeeper (1)
- phantomjs (1)
- ELK (1)
- springcloud (1)
- IDEA (1)
- hexo (1)
- ss (1)
- letencrypt (1)
最新评论
-
peakandyuri:
这个是有BUG的,数字小体现不出来,数字大了就不对了,但是Ja ...
java十进制转换N进制并反转换的工具类 -
ginolai:
然后是相关配置:/etc/sysconfig/iptables ...
Linux中iptables设置详细 -
bzhao:
我测试没啥区别啊!
Thread.sleep()和Thread.currentThread().sleep()区别 -
zhl549342097:
match == false
Spring Security 3.1 中功能强大的加密工具 PasswordEncoder -
hellotieye:
renzhengzhi 写道drager 写道用jsoup后解 ...
jsoup select 选择器
首先需要感谢下网上各位同志提供的实例,呵呵,我看来是站在巨人的肩膀上开始学习的呢。。。
设计模式之Visitor模式:(访问者模式)
定义:让代码用户能够在不修改现有类层次结构的情况下,定义该类层次结构的操作。
说实话,没看明白意思 - -|||感觉就是加入了访问接口,更方便添加外部应用于现有的结构上。。。
看例子吧,网上挖的:
如一个公司里有老板,经理,员工三种角色,每个角色都继续Human这个类,对于Human这个类,我们定义为抽象的,一个一个类介绍吧:
1.基类Human.java(抽像类,方法可以不实现)
package com.xuyi.visitor; import java.util.ArrayList; import java.util.List; public abstract class Human { protected int id; // 该人物所管理的人员,如果是老板那么那就可管理经理 protected List<? extends Human> list = new ArrayList<Human>(); public List<? extends Human> getList() { return list; } public void setList(List<? extends Human> list) { this.list = list; } public int getId() { return id; } public void setId(int id) { this.id = id; } public void accept(Visitor visitor) { } }
2.子类有3个:
Boss.java
package com.xuyi.visitor; public class Boss extends Human { public Boss(int id){ this.id = id; } @Override public void accept(Visitor visitor) { //访问者访问 visitor.visit(this); } public String toString(){ return new StringBuffer("Manager the id:"+id).toString(); } }
Employee.java
package com.xuyi.visitor; public class Employee extends Human{ public Employee(int id){ this.id = id; } @Override public void accept(Visitor visitor) { //访问者访问 visitor.visit(this); } public String toString(){ return new StringBuffer("Employee the id:"+id).toString(); } }
Manager.java
package com.xuyi.visitor; public class Manager extends Human { public Manager(int id){ this.id = id; } @Override public void accept(Visitor visitor) { //访问者访问 visitor.visit(this); } public String toString(){ return new StringBuffer("Manager the id:"+id).toString(); } }
3.访问者接口
interface Visitor
package com.xuyi.visitor; /** * 访问员工接口 * */ public interface Visitor { public void visit(Human human); }
4.访问者接口实现
FindVisitor.java
package com.xuyi.visitor; import java.util.List; public class FindVisitor implements Visitor{ private int soughtId; private Human found; public void visit(Human human) { if(found==null&&human.getId()==soughtId){ found=human; return; } List<? extends Human> list = human.getList(); for(Human e:list){ if(found==null) e.accept(this); } } public Human find(Human mc,int id){ found = null; soughtId = id; mc.accept(this); return found; } }
5.测试
Test.java
package com.xuyi.visitor; import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args) { Boss boss = new Boss(1); List<Manager> managers = new ArrayList<Manager>(); for(int i =2;i<10;i++){ Manager manager = new Manager(i); List<Employee> employees = new ArrayList<Employee>(); int k = i*10; for(int j = k;j<k+8;j++){ employees.add(new Employee(j)); } manager.setList(employees); managers.add(manager); } boss.setList(managers); FindVisitor fv =new FindVisitor(); Human human = fv.find(boss, 20); System.out.println("find:"+ human); } }
关键在于访问接口的定义以及类中加入访问者访问的方法
发表评论
-
学习设计模式之Command模式(命令模式)
2010-04-21 23:57 1131引用某大的文章: 我们常见的一种情况就是菜单命令,按钮监听。 ... -
学习设计模式之State模式(状态模式)
2010-04-21 23:03 1351引用一下某大的文章: 设计模式中的状态模式相对比较简 ... -
学习设计模式之strategy模式(策略模式)
2010-04-21 22:17 1201引用某大的文章: java设计模式 写道 ... -
学习设计模式之Template Method模式(模板方法模式)
2010-04-21 21:24 1111模板方法模式就是预先作好一个模板,开发者只要根据模板添加相应的 ... -
学习设计模式之Memento模式(备忘录模式)
2010-04-21 20:52 1092这里引用一下某大的文章: 有时候,我们需要创建对象曾在系统 ... -
学习设计模式之Observer模式(观察者模式)
2010-04-21 00:03 1087引用一下某大的文章: 用户通常通过调用对象的方法来收集该对 ... -
学习设计模式之Chain of Responsibility模式(责任链模式)
2010-04-20 23:17 1324引用下某大的文章: ... -
学习设计模式之Mediator模式(中介者模式)
2010-04-20 22:19 1229这里就直接引用一些某 ...
相关推荐
设计模式C++学习之访问者模式(Visitor)
访问者模式(Visitor) 用意:适用于数据结构相对未定的系统,把数据结构和作用于结构上的操作间的耦合解开。
C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式
C#面向对象设计模式 (行为型模式) Visitor 访问者模式 视频讲座下载
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
Visitor(访问者模式)属于行为型模式。意图:表示一个作用于某对象结构中的各元素的操作。
访问者模式(Visitor Pattern)是GoF提出的23种设计模式中的一种,属于行为模式。它表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。从定义可以看出,...
面向对象 北工大 课设 使用多种设计模式,实现的求值引擎,包括表达式树的构建
设计模式 -访问者(Visitor)模式详解和应用.pdf
C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式.rar 李建忠主讲 上海祝成信息科技有限公司担任软件架构师,并讲授C#/.NET软件开发课程
本文实例讲述了C#设计模式之Visitor访问者模式解决长隆欢乐世界问题。分享给大家供大家参考,具体如下: 一、理论定义 访问者模式 提供了 一组 集合 对象 统一的 访问接口,适合对 一个集合中的对象,进行逻辑操作,...
c++设计模式-行为型模式-访问者模式;qt工程;c++简单源码; 访问者(Visitor)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新...
本电子书一共两个压缩文档,本文件为part2. 《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。...第25章 访问者模式(Visitor) 附录A常见面向对象设计原则 附录BUML简介 参考文献
主要介绍了php设计模式中的访问者模式,使用php实现访问者模式,感兴趣的小伙伴们可以参考一下
这是JAVA设计模式中属于行为模式的部分,包括Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、Mediator(中介模式)、Strategy(策略模式)、State 、Observer(观察者模式)、Visitor...
主要介绍了iOS应用的设计模式开发中的Visitor访问者模式的实例,示例代码为传统的Objective-C,需要的朋友可以参考下
讲 师:李建忠 上海祝成信息科技有限公司 高级培训讲师 MSDN特邀讲师 C#面向对象设计模式纵横谈... C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式 C#面向对象设计模式纵横谈(25):设计模式总结