- 浏览: 187724 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (321)
- eclipse (4)
- idea (2)
- Html (8)
- Css (14)
- Javascript (8)
- Jquery (6)
- Ajax Json (4)
- Bootstrap (0)
- EasyUI (0)
- Layui (0)
- 数据结构 (0)
- Java (46)
- DesPattern (24)
- Algorithm (2)
- Jdbc (8)
- Jsp servlet (13)
- Struts2 (17)
- Hibernate (11)
- Spring (5)
- S2SH (1)
- SpringMVC (4)
- SpringBoot (11)
- WebService CXF (4)
- Poi (2)
- JFreeChart (0)
- Shiro (6)
- Lucene (5)
- ElasticSearch (0)
- JMS ActiveMQ (3)
- HttpClient (5)
- Activiti (0)
- SpringCloud (11)
- Dubbo (6)
- Docker (0)
- MySQL (27)
- Oracle (18)
- Redis (5)
- Mybatis (11)
- SSM (1)
- CentOS (10)
- Ant (2)
- Maven (4)
- Log4j (7)
- XML (5)
最新评论
3. 行为型模式 (9) 访问者模式
1. 访问者模式
2. 访问者模式
访问者模式(Visitor Pattern)中元素的执行算法可以随着访问者改变而改变。 元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。 优点: 1. 符合单一职责原则。 2. 优秀的扩展性。 3. 灵活性。 缺点: 1. 具体元素对访问者公布细节,违反了迪米特原则。 2. 具体元素变更比较困难。 3. 违反了依赖倒置原则,依赖了具体类,没有依赖抽象。
1. 访问者模式
package com.andrew.pattern0309.visitor.model01; public interface ComputerPart { public void accept(ComputerPartVisitor computerPartVisitor); }
package com.andrew.pattern0309.visitor.model01; public class Keyboard implements ComputerPart { @Override public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); } } package com.andrew.pattern0309.visitor.model01; public class Monitor implements ComputerPart { @Override public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); } } package com.andrew.pattern0309.visitor.model01; public class Mouse implements ComputerPart { @Override public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); } } package com.andrew.pattern0309.visitor.model01; public class Computer implements ComputerPart { ComputerPart[] parts; public Computer() { parts = new ComputerPart[] {new Mouse(), new Keyboard(), new Monitor()}; } @Override public void accept(ComputerPartVisitor computerPartVisitor) { for (int i = 0; i < parts.length; i++) { parts[i].accept(computerPartVisitor); } computerPartVisitor.visit(this); } }
package com.andrew.pattern0309.visitor.model01; public interface ComputerPartVisitor { public void visit(Computer computer); public void visit(Mouse mouse); public void visit(Keyboard keyboard); public void visit(Monitor monitor); }
package com.andrew.pattern0309.visitor.model01; public class ComputerPartDisplayVisitor implements ComputerPartVisitor { @Override public void visit(Computer computer) { System.out.println("Displaying Computer."); } @Override public void visit(Mouse mouse) { System.out.println("Displaying Mouse."); } @Override public void visit(Keyboard keyboard) { System.out.println("Displaying Keyboard."); } @Override public void visit(Monitor monitor) { System.out.println("Displaying Monitor."); } }
package com.andrew.pattern0309.visitor.model01; /** * 1. 访问者模式 * * @author andrew * @date 2018/08/20 */ public class Client { public static void main(String[] args) { ComputerPart computer = new Computer(); computer.accept(new ComputerPartDisplayVisitor()); } } 运行结果: Displaying Mouse. Displaying Keyboard. Displaying Monitor. Displaying Computer.
2. 访问者模式
package com.andrew.pattern0309.visitor.model02; public interface Element { public abstract void accept(IVisitor visitor); public abstract void doSomething(); }
package com.andrew.pattern0309.visitor.model02; public class ConcreteElement1 implements Element { public void accept(IVisitor visitor) { visitor.visit(this); }; public void doSomething() { System.out.println("这是元素1"); } } package com.andrew.pattern0309.visitor.model02; public class ConcreteElement2 implements Element { public void accept(IVisitor visitor) { visitor.visit(this); }; public void doSomething() { System.out.println("这是元素2"); } }
package com.andrew.pattern0309.visitor.model02; public interface IVisitor { public void visit(ConcreteElement1 el1); public void visit(ConcreteElement2 el2); }
package com.andrew.pattern0309.visitor.model02; public class Visitor implements IVisitor { @Override public void visit(ConcreteElement1 el1) { el1.doSomething(); } @Override public void visit(ConcreteElement2 el2) { el2.doSomething(); } }
package com.andrew.pattern0309.visitor.model02; import java.util.ArrayList; import java.util.List; import java.util.Random; public class ObjectStruture { public static List<Element> getList() { List<Element> list = new ArrayList<Element>(); Random ran = new Random(); for (int i = 0; i < 10; i++) { int a = ran.nextInt(100); if (a > 50) { list.add(new ConcreteElement1()); } else { list.add(new ConcreteElement2()); } } return list; } }
package com.andrew.pattern0309.visitor.model02; import java.util.List; /** * 2. 访问者模式 * * @author andrew * @date 2018/08/20 */ public class Client { public static void main(String[] args) { List<Element> list = ObjectStruture.getList(); for (Element e: list) { e.accept(new Visitor()); } } } 运行结果: 这是元素1 这是元素1 这是元素1 这是元素1 这是元素2 这是元素2 这是元素1 这是元素2 这是元素1 这是元素1
发表评论
-
3. 行为型模式 (11) 解释器模式
2018-11-08 10:39 3943. 行为型模式 (11) 解释器模式 解释器模式(In ... -
3. 行为型模式 (10) 中介者模式
2018-11-08 09:56 3663. 行为型模式 (10) 中介者模式 中介者模式(Me ... -
3. 行为型模式 (8) 状态模式
2018-11-07 09:13 4533. 行为型模式 (8) 状态模式 状态模式(State ... -
3. 行为型模式 (7) 备忘录模式
2018-11-06 14:27 4313. 行为型模式 (7) 备忘录模式 备忘录模式(Mem ... -
3. 行为型模式 (6) 命令模式
2018-11-06 11:40 3793. 行为型模式 (6) 命令模式 命令模式(Comma ... -
3. 行为型模式 (5) 责任链模式
2018-11-06 09:40 4333. 行为型模式 (5) 责任链模式 责任链模式(Cha ... -
3. 行为型模式 (4) 迭代子模式
2018-11-05 14:23 3523. 行为型模式 (4) 迭代 ... -
3. 行为型模式 (3) 观察者模式
2018-11-02 16:17 4453. 行为型模式 (3) 观察者模式 当对象间存在一对多 ... -
3. 行为型模式 (2) 模板方法模式
2018-11-02 09:26 4153. 行为型模式 (2) 模板方法模式 在模板模式(Te ... -
3. 行为型模式 (1) 策略模式
2018-11-01 09:23 4373. 行为型模式 (1) 策略模式 在策略模式(Stra ... -
2. 结构型模式 (3) 代理模式
2018-10-29 11:26 3712. 结构型模式 (3) 代理模式 代理模式(Proxy ... -
2. 结构型模式 (7) 享元模式
2018-10-30 13:27 4132. 结构型模式 (7) 享元模式 享元模式(Flywe ... -
2. 结构型模式 (6) 组合模式
2018-10-30 09:50 3642. 结构型模式 (6) 组合模式 组合模式(Compo ... -
2. 结构型模式 (2) 装饰者模式
2018-10-29 09:30 4092. 结构型模式 (2) 装饰器模式 装饰器模式(Dec ... -
2. 结构型模式 (5) 桥接模式
2018-10-30 09:11 3932. 结构型模式 (5) 桥接模式 桥接(Bridge) ... -
2. 结构型模式 (4) 外观模式
2018-10-29 14:20 3492. 结构型模式 (4) 外观模式 外观模式(Fac ... -
2. 结构型模式 (1) 适配器模式
2018-10-26 15:35 3842. 结构型模式 (1) 适配器模式 将一个类的接口转换 ... -
1. 创建型模式 (2) 原型模式
2018-09-12 13:46 7411. 创建型模式 (2) 原型模式 用原型实例指定创建对 ... -
1. 创建型模式 (3) 建造者模式
2018-10-25 16:28 3701. 创建型模式 (3) 建造 ... -
1. 创建型模式 (1) 单例模式
2018-09-12 13:42 4301. 创建型模式 (3) 单例模式 单例模式是为确保一个 ...
相关推荐
c++设计模式-行为型模式-访问者模式;qt工程;c++简单源码; 访问者(Visitor)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新...
C#面向对象设计模式 (行为型模式) Visitor 访问者模式 视频讲座下载
JAVA-设计模式-行为型模式-访问者模式
设计模式主要分为三大类: 1.创建型模式:工厂模式、抽象...4.行为型模式:模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。
创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3.... 4.... 5....结构型: 6.... 7.... 8.... 9.... 10.... 11.... 12.... 13.... 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)
9. **访问者模式**:定义一个访问者的接口,用于访问一个对象结构中的元素,并定义一个访问操作在元素上的实现。 10. **迭代器模式**:提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。 11. **解释器...
3. **增加复杂性**:如果对象结构过于复杂,访问者模式会增加系统的理解难度。 在给出的`VisitorPattern.cpp`和`VisitorPattern.h`文件中,我们可以看到实现访问者模式的具体代码。通常,`VisitorPattern.cpp`会...
访问者模式是23种经典设计模式中行为型模式的一种,其主要目的是封装一些施加于某数据结构元素之上的操作。当这些操作的种类越复杂,越需要经常变更时,访问者模式就显得十分有用。它将作用于元素的操作与元素本身...
### C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式 #### 概述 在本篇文章中,我们将深入探讨面向对象设计模式中的一个非常重要的模式——**Visitor(访问者)模式**。此模式属于行为型模式的一...
访问者模式(Visitor Pattern)是一种行为型设计模式,它允许我们向现有的类层次结构中添加新的功能,而无需修改这些类。该模式通过将这些功能封装成独立的类(即访问者),然后让这些访问者访问并操作这些现有类的...
**访问者模式**是一种行为设计模式,它允许在不修改对象结构的情况下添加新的操作。这种模式主要用于处理具有复杂对象结构的情况,使得我们可以对结构中的每个元素执行特定操作,而无需暴露其内部实现。 访问者模式...
总结来说,访问者模式提供了一种优雅的方式来扩展对象的行为,而无需修改对象本身。通过将操作和数据结构分离,它增加了系统的灵活性和可维护性。"设计模式的访问者模式的例子"是理解并掌握这一模式的好材料,对于想...
访问者模式是一种行为设计模式,它使你可以在不修改对象结构的情况下,为对象添加新的操作。这种模式的核心在于将数据结构与对这些数据的操作解耦,使得增加新的操作变得容易,同时也允许独立地改变元素类和访问者类...
5. 构造者模式:该模式提供了一种复杂对象的创建方式,通过分步创建对象的不同部分,满足对象的创建过程中不同的业务逻辑。 优点:可以根据业务逻辑来控制对象的创建过程,满足复杂对象的创建需求。 缺点:需要...
访问者模式是设计模式中的一种行为模式,它在实际的软件开发中具有重要的应用价值。通过理解并掌握访问者模式,开发者可以更好地实现对象结构中元素的操作,同时保持元素类的封装性,避免因频繁修改而引入的复杂性。...
访问者模式是一种设计模式,属于行为模式类别,其主要目的是在不修改对象结构的前提下,为对象结构中的元素提供新的操作。这种模式的核心思想是将数据结构与数据操作分离,使得增加新的操作变得容易,同时也避免了对...
访问者模式.docx`中应该详细介绍了访问者模式的概念、结构、优缺点以及如何实现。而`code`文件夹中则可能包含了上述步骤的示例代码,你可以通过查看这些代码来更深入地理解访问者模式的应用。 总的来说,访问者模式...
访问者模式是一种软件设计模式,它在对象结构中定义了一个访问者的接口,使得该访问者可以访问该结构中的每一个元素,同时不影响这些元素自身的行为。这种模式的主要目的是将数据操作和业务逻辑分离,使得数据结构...