当前位置: 移动技术网 > IT编程>软件设计>设计模式 > 设计模式-访问者模式

设计模式-访问者模式

2020年08月10日  | 移动技术网IT编程  | 我要评论
设计模式-访问者模式


设计模式-访问者模式


表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作

class diagram
我们来举个例子

先定义抽象 Element 电子设备

public interface Electronics { void accept(Person person); } 

两个实现电视和手机

public class Television implements Electronics{ @Override public void accept(Person person) { System.out.print("电视在工作,"); person.watchTelevision(this); } } public class Mobile implements Electronics{ @Override public void accept(Person person) { System.out.print("手机在工作,"); person.playMobile(this); } } 

抽象的 Visitor 人

public interface Person { void playMobile(Mobile mobile); void watchTelevision(Television television); } 

分别实现爸爸,妈妈和儿子三个Visitor

public class Father implements Person { @Override public void playMobile(Mobile mobile) { System.out.print("爸爸在读新闻\n"); } @Override public void watchTelevision(Television television) { System.out.print("爸爸在看新闻\n"); } } public class Mother implements Person { @Override public void playMobile(Mobile mobile) { System.out.print("妈妈在看八卦\n"); } @Override public void watchTelevision(Television television) { System.out.print("妈妈在看电视剧\n"); } } public class Son implements Person { @Override public void playMobile(Mobile mobile) { System.out.print("儿子在聊天\n"); } @Override public void watchTelevision(Television television) { System.out.print("儿子在看演唱会\n"); } } 

定义对象结构

public class Home { private List<Electronics> list = new ArrayList<>(); public void add(Electronics electronics){ list.add(electronics); } public void action(Person person){ for (Electronics electronics : list){ electronics.accept(person); } } } 

调用

public class Demo { public static void main(String[] args) { Home home = new Home(); home.add(new Mobile()); home.add(new Television()); home.action(new Father()); home.action(new Mother()); home.action(new Son()); } } 

结果
result
访问者模式使 Visitor 的增减不影响其他类代码,同时使 Element 的增减复杂了,需要修改所有代码

本文地址:https://blog.csdn.net/m0_37543289/article/details/107777449

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网