Java 23种设计模式之访问者模式
2018-01-02 23:05
495 查看
1. 概念
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
2. 创建访问者的抽象类
** * @author zlc * @created 2017/12/24 * 状态的抽象类 */ public abstract class Action { public abstract void getManConclusion(Man man); public abstract void getWomanConclusion(Woman man); }
3. 创建Element的抽象类
/** * @author zlc * @created 2017/12/24 * 人的抽象类 */ public abstract class Person { public abstract void accept(Action action); }
4.创建具体访问者类
1. /** * @author zlc * @created 2017/12/24 */ public class Success extends Action{ @Override public void getManConclusion(Man man) { System.out.println("男人成功时,背后都有一个伟大的女人"); } @Override public void getWomanConclusion(Woman man) { System.out.println("女人成功时,背后大多有一个不成功的男人"); } } 2. /** * @author zlc * @created 2017/12/24 */ public class Failing extends Action{ @Override public void getManConclusion(Man man) { System.out.println("男人失败时,闷头喝酒,谁也不用劝"); } @Override public void getWomanConclusion(Woman man) { System.out.println("女人失败时,眼泪汪汪,谁也劝不了"); } } 3. /** * @author zlc * @created 2017/12/24 */ public class Loving extends Action{ @Override public void getManConclusion(Man man) { System.out.println("男人恋爱时,凡事不懂也要装懂"); } @Override public void getWomanConclusion(Woman man) { System.out.println("女人恋爱时,遇事懂也装作不懂"); } }
5.创建Element的具体实现类
/** * @author zlc * @created 2017/12/24 */ public class Man extends Person{ @Override public void accept(Action action) { action.getManConclusion(this); } } /** * @author zlc * @created 2017/12/24 */ public class Woman extends Person{ @Override public void accept(Action action) { action.getWomanConclusion(this); } }
6. 创建ObjectStructure类 枚举它的元素
/** * @author zlc * @created 2017/12/24 */ public class ObjectStructure { private List<Person> peoples = new ArrayList<>(); //增加 public void attach(Person p){ peoples.add(p); } //移除 public void detach(Person p){ peoples.remove(p); } //查看显示 public void display(Action action){ for (Person p: peoples) { p.accept(action); } System.out.println("----------------"); } }
7. 测试类
@org.junit.Test public void test(){ ObjectStructure o = new ObjectStructure(); o.attach(new Man()); o.attach(new Woman()); //成功 Success success = new Success(); o.display(success); //失败 Failing failing = new Failing(); o.display(failing); //恋爱 Loving loving = new Loving(); o.display(loving); //结婚 Marriage marriage = new Marriage(); o.display(marriage); }
8.小结
访问者模式目的是要把处理从数据结构分离出来,增加新的操作很容易,因为增加新的操作意味着增加一个新的访问者。
相关文章推荐
- Java23种设计模式之-----访问者模式
- java23种设计模式(4)-访问者模式
- 23种设计模式(16)java访问者模式
- Java开发中的23种设计模式详解----访问者模式(Visitor)
- Java开发中的23种设计模式之二十一:访问者模式(Visitor)
- JAVA开发的23种设计模式之 --- 访问者模式
- Java23种设计模式——访问者模式
- [置顶] Java23种设计模式总汇
- Java开发中的23种设计模式详解
- Java开发中的23种设计模式详解
- java 23种设计模式 深入理解
- 经典:从追MM谈Java的23种设计模式
- Java开发中的23种设计模式详解(转)
- Java开发中的23种设计模式详解(转)
- Java开发中的23种设计模式详解(四)
- Java设计模式(17) -- 访问者
- java关于23种设计模式的有趣见解[转]
- Java设计模式(三) Visitor(访问者)模式及多分派场景应用
- java23种设计模式
- java 23种设计模式 深入理解