- 浏览: 611974 次
- 性别:
- 来自: 卡哇伊
文章分类
- 全部博客 (299)
- C# (25)
- Java (1)
- WinForm (0)
- Asp.Net (86)
- Jsp (2)
- Php (1)
- Web Service (0)
- Desgin Patterns (19)
- Data Structure & Algorithms (1)
- SQLserver (41)
- Mysql (0)
- Oracle (2)
- Javascript (50)
- Ajax (10)
- Jquery (1)
- Flex (0)
- Regular Expression (5)
- DIV+CSS+XHTML+XML (18)
- Software Test (0)
- Linux (0)
- Utility (17)
- Net Digest (4)
- windows 2003 (10)
- Other (4)
- English (1)
- IT Term (1)
最新评论
-
w497480098h:
学习了 很好谢谢
SQL Server下无限多级别分类查询解决办法(简单查询树形结构数据库表) -
main_fun:
确实不错
iframe自适应高度 -
jveqi:
...
DBA -
mxcie:
其它版本没有确认,今天使用vs2003时,其.sln文件也需要 ...
彻底删除项目的VSS源代码管理信息 -
moneyprosper:
就只有IE支持,火狐和谷歌都不支持此种方法。正在寻找中。。。
从父页面读取和操作iframe中内容方法
意图
表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作.
意图中的-->某对象结构:可以理解为集合,它们相当于一个聚集一样,里面可以放置多个元素,访问者模式作用于聚集中每一个元素的不同操作.
我们想修改某个对象的新操作必然要修改该对象定义的类,在类里面增加相应的方法,这样这个对象就具备了新的操作.访问者模式不需要修改这个对象对应的类就可以对该对象添加新的操作.
适用性:
1.一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作.
2.需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而你想避免让这些操作"污染"这些对象的类.Visitor使得你可以将相关的操作集中起来定义在一个类中.当该对象结构被很多应用共享时,用Visitor模式让每个应用仅包含需要用到的操作.
3.定义对象结构的类很少改变,但经常需要在此结构上定义新的操作.改变对象结构类需要重定义对搜有访问者的接口,这可能需要很大的代价.如果对象结构类经常改变,那么可能还是在这些类中定义这些操作较好.
构成:
1.抽象访问者(Visitor)角色:为对象结构类中每一个ConcreteElement的类声明一个visit操作.
2.具体访问者(ConcreteVisitor)角色:实现每个由Visitor声明的操作.
3.元素(Element)角色:定义一个Accept操作,它以一个访问者为参数.
4.具体元素(ConcreteElement)角色:实现Accept操作,该操作以一个访问者为参数.
5.对象结构类(ObjectStructure)角色(聚集角色):能枚举(遍历)它的元素.可以提供一个高层的接口以允许访问者访问它的元素.
ClassDiagram:
SequenceDiagram:
class Client { static void Main(string[] args) { ObjectStructure o = new ObjectStructure(); o.Attach(new ConcreteElementA()); o.Attach(new ConcreteElementB()); ConcreteVisitorA v1 = new ConcreteVisitorA(); ConcreteVisitorB v2 = new ConcreteVisitorB(); o.Accept(v1); o.Accept(v2); Console.ReadKey(); } } /// <summary> /// 抽象访问者 /// </summary> abstract class Visitor { public abstract void VisitConcreteElementA(ConcreteElementA concreteElementA); public abstract void VisitConcreteElementB(ConcreteElementB concreteElementB); } /// <summary> /// 元素角色 /// </summary> abstract class Element { public abstract void Accept(Visitor visitor); } /// <summary> /// 具体元素角色A /// </summary> class ConcreteElementA : Element { public override void Accept(Visitor visitor) { visitor.VisitConcreteElementA(this); } } /// <summary> /// 具体元素角色B /// </summary> class ConcreteElementB : Element { public override void Accept(Visitor visitor) { visitor.VisitConcreteElementB(this); } } /// <summary> /// 具体访问者角色A /// </summary> class ConcreteVisitorA : Visitor { public override void VisitConcreteElementA(ConcreteElementA concreteElementA) { Console.WriteLine("{0} Visited by {1}", concreteElementA.GetType().Name, this.GetType().Name); } public override void VisitConcreteElementB(ConcreteElementB concreteElementB) { Console.WriteLine("{0} Visited by {1}", concreteElementB.GetType().Name, this.GetType().Name); } } /// <summary> /// 具体访问者角色B /// </summary> class ConcreteVisitorB : Visitor { public override void VisitConcreteElementA(ConcreteElementA concreteElementA) { Console.WriteLine("{0} Visited by {1}", concreteElementA.GetType().Name, this.GetType().Name); } public override void VisitConcreteElementB(ConcreteElementB concreteElementB) { Console.WriteLine("{0} Visited by {1}", concreteElementB.GetType().Name, this.GetType().Name); } } /// <summary> /// 对象结构类 /// </summary> class ObjectStructure { private ArrayList list = new ArrayList(); public void Attach(Element element) { list.Add(element); } public void Dettach(Element element) { list.Remove(element); } public void Accept(Visitor vsistor) { foreach (Element e in list) { e.Accept(vsistor); } } }
发表评论
-
AbstractFactoryPattern(二)
2009-05-01 21:42 714关于抽象工厂(Abstract F ... -
MementoPattern
2009-05-01 16:10 724意图在不破坏封装性的前提下,捕获一个对象内部状态,并在该对象之 ... -
MediatorPattern
2009-05-01 11:16 704意图用一个中介对象封装一系列的对象交互.中介者使各对象不需要显 ... -
Statepattern
2009-04-30 13:45 805意图允许一个对象在其 ... -
Chain of Responsibility Pattern
2009-04-28 23:23 863意图使多个对象都有机会处理请求,从而避免请求的发送者和接收者之 ... -
InterpreterPattern
2009-04-28 14:43 861意图给定一个语言之后,解释器模式可以定义出其文法的一种表示,并 ... -
IteratorPattern
2009-04-26 18:15 819意图提供一种方法顺序 ... -
CommandPattern
2009-04-26 13:35 700意图:将一个请求封装为 ... -
StrategyPattern
2009-04-25 19:08 751策略模式(Strategy Pattern) 中体现了两个非常 ... -
TemplateMethodPattern
2009-04-25 13:24 836TemplateMethodPattern:定义一个操作中算法 ... -
PrototypePattern
2009-04-23 15:46 796意图用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的 ... -
追MM与23种设计模式
2009-04-21 15:13 6921、FACTORY—追MM少不了请 ... -
AbstractFactoryPattern
2009-04-21 13:23 748意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定 ... -
FactoryMethodPattern
2009-04-19 22:20 870工厂方法(FactoryMethod ... -
ObserverPattern
2009-03-27 17:40 807观察者模式又叫做发布- ... -
SimpleFactoryPattern
2009-03-26 00:57 795工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决 ... -
Builder Pattern
2009-03-21 18:47 1396建造者(Builder)模式 ... -
Singleton Pattern
2009-03-16 16:50 989单件模式:(Singleton pattern) 1.目的 1 ...
相关推荐
**访客模式(Visitor Pattern)** 访客模式是一种行为设计模式,它允许在不修改对象结构的情况下,为对象增加新的操作。这种模式常用于将算法与数据结构分离,使得算法可以独立于数据结构进行变化。在软件开发中,当...
**访问者模式(VisitorPattern)** 访问者模式是一种行为设计模式,它使你能在不修改对象结构的前提下向对象添加新的操作。这种模式常用于处理具有复杂逻辑的对象结构,特别是当你需要对这些对象进行多态操作时。访问...
**访问者模式(Visitor Pattern)**是一种行为设计模式,它提供了一种在不修改对象结构的情况下增加新操作的方法。这种模式的主要思想是将数据结构与算法分离,使得算法可以在不改变对象结构的情况下独立变化。 在...
访问者模式(VisitorPattern)是一种行为设计模式,其主要目的是为了在不改变数据结构的前提下,增加对元素集合的新操作。这种模式将操作封装在独立的访问者类中,使得操作和数据结构解耦,允许两者独立演进。 **...
**访客模式(Visitor Pattern)** 访客模式是一种行为设计模式,它让你能添加新的操作到对象结构中,而无需修改该结构的类。访客模式的核心是将数据结构与操作分离,使得增加新的操作变得容易。在访客模式中,一个代表...
访客模式 作者:Brian ( ) 您必须一组两个一组地工作 迭代器类 您已经获得了四个文件,其中包含以下五个迭代器类的声明和定义: 迭代器:这是用于定义所有其他迭代器类的接口的基类 NullIterator:此迭代器由...
1、策略模式STRATEGY PATTERN 2、代理模式PROXY PATTERN 3、单例模式SINGLETON PATTERN ...18、访问者模式VISITOR PATTERN 19、状态模式 20、原型模式 21、中介者模式 22、解释器模式 23、亨元模式 24、备忘录模式
通常,`VisitorPattern.cpp`会包含具体访问者和元素的实现,而`VisitorPattern.h`则定义了相关的接口和类。通过阅读这些文件,我们可以了解到如何在C++中实际应用访问者模式来实现对对象结构的操作。 总结来说,...
访客模式 购物终端实施 考虑一家商店,其中每件商品都有单位价格,也可能有批量价格。 例如,一个苹果可能是 1.00 美元,或者 4 个苹果是 3.00 美元。 实现一个销售点扫描 API,该 API 接受产品的任意订购(类似于...
策略模式(Strategy Pattern) 抽象工厂模式(Abstract Factory Pattern) 代理模式(Proxy Pattern) 单例模式(Singleton Pattern) 迭代器模式(Iterator Pattern) 访问者模式(Visitor Pattern) 工厂方法模式(Factory ...
[A little java笔记][1] Evaluate(interpret) all the hierarchy objects, apply coresponding operators to every objects. Introspect 和 retrospect具有类似的地方(review ,look back on, backcall) ...
访问者模式(Visitor Pattern)是一种行为设计模式,它使你能在不修改对象结构的前提下,为对象添加新的操作。这种模式在处理具有复杂逻辑和多种类型的对象结构时特别有用,因为它允许你在不改变原有结构的情况下,...
访问者模式(Visitor Pattern)是GoF提出的23种设计模式中的一种,属于行为模式。它表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。从定义可以看出,...
创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5.... 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)
创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3.... 4.... 5.... 6. 适配器模式(Adapter Pattern) 7.... 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)
访问者模式(Visitor Pattern) 4. J2EE 模式 MVC 模式(MVC Pattern) 业务代表模式(Business Delegate Pattern) 数据访问对象模式(Dao Pattern) 前端控制器模式(Front Controller Pattern) 拦截过滤器...
C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式...22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)
创建型模式用来处理对象的创建过程,主要包含以下5种设计模式: 工厂方法模式(Factory Method Pattern) 抽象工厂模式(Abstract Factory Pattern) 建造者模式(Builder... 访问者模式(Visitor Pattern)