设计模式(十九):访问者模式
优点:
① 可以在不改变各元素的类的前提下,定义作用于这些元素的新操作新状态,将元素和作用于元素之上的操作之间的耦合解脱开,使得操作可以相对集中和自由变化增减。
② 对于元素操作或状态,具有良好的灵活性和扩展性。
缺点:
① 增加新的对象结构(即对象元素)Element很困难,需要改动多。
适用范围:
该模式适合于对象结构(即对象元素)相对稳定、且有易于变化的操作或状态的系统
客户端:
ObjectStructure o = new ObjectStructure(); //对象结构
o.add(new ConcreteElement1()); //男人
o.add(new ConcreteElement2()); //女人
Visitor success = new ConcreteVisitor1();//成功
o.display(success); //展示
Visitor fail = new ConcreteVisitor2();//失败
o.display(fail); //展示
Visitor love = new ConcreteVisitor3();//恋爱
o.display(love); //展示
//打印结果
男人成功时,背后多半有个伟大的女人
女人成功时,背后大多有个不成功的男人
男人失败时,闷头喝酒,谁也不用劝
女人失败时,眼泪汪汪,谁也劝不了
男人恋爱时,凡事不懂也要装懂
女人恋爱时,遇事懂也装不懂
/** * ObjectStructure 对象结构类(添加、删除和展示所有元素的方法) * Element 抽象的对象元素(获取元素状态的方法) * ConcreteElement1 男人 ConcreteElement2 女人 -- 元素实例化 * * Visitor 元素状态抽象类(分别获知男人和女人状态的方法) * ConcreteVisitor1 成功状态(男女) ConcreteVisitor2 失败状态(男女) ConcreteVisitor3 恋爱状态(男女) -- 实例化状态 */