设计模式之访问者模式

来源:互联网 发布:守望先锋 伤害数据 编辑:程序博客网 时间:2024/06/09 15:19

描述:访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。


UML类图如下:



测试代码如下:

1、访问者接口类

package com.java.visitor;public interface IVisitor {public void visit(ConcreteElement1 e1);public void visit(ConcreteElement2 e1);}

2、访问者接口实现类

package com.java.visitor;public class Visitor implements IVisitor {@Overridepublic void visit(ConcreteElement1 e1) {e1.doSomething();}@Overridepublic void visit(ConcreteElement2 e2) {e2.doSomething();}}


3、抽象元素类

package com.java.visitor;public abstract class Element {public abstract void doSomething();public abstract void accept(IVisitor visitor);}

4、具体元素类

package com.java.visitor;public class ConcreteElement1 extends Element {@Overridepublic void doSomething() {System.out.println("朋友张三...");}@Overridepublic void accept(IVisitor visitor) {visitor.visit(this);}}
package com.java.visitor;public class ConcreteElement2 extends Element {@Overridepublic void doSomething() {System.out.println("朋友李四...");}@Overridepublic void accept(IVisitor visitor) {visitor.visit(this);}}

5、元素生成器

package com.java.visitor;import java.util.Random;public class ObjectStructure {public static Element createElement(){Random rand = new Random();if(rand.nextInt(100) > 50){return new ConcreteElement1();}else{return new ConcreteElement2();}}}

6、测试类

package com.java.visitor;public class VisitorTest {public static void main(String[] args) {for(int i = 0; i < 10; i ++){Element e1 = ObjectStructure.createElement();e1.accept(new Visitor());}}}

7、测试结果

朋友张三...朋友李四...朋友李四...朋友张三...朋友张三...朋友李四...朋友张三...朋友张三...朋友张三...朋友张三...



原创粉丝点击