设计模式学习之访问者模式
1.名词解释:
访问者模式:标识一个作用于某对象结构中的各元素的操作。它可使你在不改变各元素的前提下作用于这些元素的新操作。
?
2.代码示例:
?
访问者抽象类package DesignPattern.VisitorPattern;public abstract class Visitor {public abstract void VisitConcreateElementA(ConcreateElementA concreateElementA);public abstract void VisitConcreateElementB(ConcreateElementB concreateElementB); }
?
实际访问者类Apackage DesignPattern.VisitorPattern;public class ConcreateVisitorA extends Visitor{@Overridepublic void VisitConcreateElementA(ConcreateElementA concreateElementA) {// TODO Auto-generated method stubSystem.out.println(concreateElementA.getName() + "失败时,闷头喝酒,谁也不用劝。");}@Overridepublic void VisitConcreateElementB(ConcreateElementB concreateElementB) {// TODO Auto-generated method stubSystem.out.println(concreateElementB.getName() + "失败时,眼泪汪汪,谁也劝不住。");}}
?
实际访问者类Bpackage DesignPattern.VisitorPattern;public class ConcreateVisitorB extends Visitor{@Overridepublic void VisitConcreateElementA(ConcreateElementA concreateElementA) {// TODO Auto-generated method stubSystem.out.println(concreateElementA.getName() + "成功时,背后多半有一个伟大的女人。");}@Overridepublic void VisitConcreateElementB(ConcreateElementB concreateElementB) {// TODO Auto-generated method stubSystem.out.println(concreateElementB.getName() + "成功时,背后大多有一个不成功的男人。");}}
?
实际访问者类Cpackage DesignPattern.VisitorPattern;public class ConcreateVisitorC extends Visitor{@Overridepublic void VisitConcreateElementA(ConcreateElementA concreateElementA) {// TODO Auto-generated method stubSystem.out.println(concreateElementA.getName() + "恋爱时,凡事不懂也要装懂。");}@Overridepublic void VisitConcreateElementB(ConcreateElementB concreateElementB) {// TODO Auto-generated method stubSystem.out.println(concreateElementB.getName() + "成功时,遇事懂也装作不懂。");}}
?
抽象元素类package DesignPattern.VisitorPattern;public abstract class Element {public abstract void Accept(Visitor visitor);}
?
实际元素类Apackage DesignPattern.VisitorPattern;public class ConcreateElementA extends Element{private String name = "";public ConcreateElementA(String name) {this.name = name;}@Overridepublic void Accept(Visitor visitor) {// TODO Auto-generated method stubvisitor.VisitConcreateElementA(this);}public String getName() {return this.name;}}
?
实际元素类Bpackage DesignPattern.VisitorPattern;public class ConcreateElementB extends Element{private String name = "";public ConcreateElementB(String name) {this.name = name;}@Overridepublic void Accept(Visitor visitor) {// TODO Auto-generated method stubvisitor.VisitConcreateElementB(this);}public String getName() {return this.name;}}
?
主控程序package DesignPattern.VisitorPattern;public class Client { public static void main(String[] args) {ObjectStructure objectStructure = new ObjectStructure();objectStructure.add(new ConcreateElementA("男人"));objectStructure.add(new ConcreateElementB("女人"));ConcreateVisitorA v1 = new ConcreateVisitorA();ConcreateVisitorB v2 = new ConcreateVisitorB();ConcreateVisitorC v3 = new ConcreateVisitorC();objectStructure.Accept(v1);objectStructure.Accept(v2);objectStructure.Accept(v3);}}
?
?
?
?