设计模式java——访问者模式
2023-09-11 14:16:28 时间
访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
访问者模式Demo:
/**
* 2018年4月11日下午9:04:54
*/
package com.Designpattern;
import java.util.ArrayList;
import java.util.List;
/**
* @author xinwenfeng
*
*/
public class TestVisitor {
/**
* @param args
*/
public static void main(String[] args) {
MyAnimalVisitor dog = new DogVisitor();
MyAnimalVisitor flittermouse = new FlittermouseVisitor();
ObjectStructure os = new ObjectStructure();
os.addStatus(new DayTime());
os.addStatus(new NightTime());
os.show(dog);
os.show(flittermouse);
}
}
interface Status{//只有白天和黑夜,确定并且不会改变
void showStatus(MyAnimalVisitor visitor);
}
interface MyAnimalVisitor{//可以有很多种实现
void dayStatus(Status status);
void nightStatus(Status status);
}
class DogVisitor implements MyAnimalVisitor{
@Override
public void dayStatus(Status status) {
System.out.println(status.getClass().getSimpleName()+":狗出门溜达。");
}
@Override
public void nightStatus(Status status) {
System.out.println(status.getClass().getSimpleName()+":狗睡狗窝。");
}
}
class FlittermouseVisitor implements MyAnimalVisitor{
@Override
public void dayStatus(Status status) {
System.out.println(status.getClass().getSimpleName()+":蝙蝠住山洞。");
}
@Override
public void nightStatus(Status status) {
System.out.println(status.getClass().getSimpleName()+":蝙蝠觅食。");
}
}
class DayTime implements Status{
@Override
public void showStatus(MyAnimalVisitor visitor) {
visitor.dayStatus(this);
}
}
class NightTime implements Status{
@Override
public void showStatus(MyAnimalVisitor visitor) {
visitor.nightStatus(this);
}
}
//对象结构
class ObjectStructure{
private List<Status> status = new ArrayList<>();
public void addStatus(Status s) {
status.add(s);
}
public void removeStatus(Status s) {
status.remove(s);
}
public void show(MyAnimalVisitor v) {
for(Status s:status) {
s.showStatus(v);
}
}
}
结果:
相关文章
- Java设计模式----观察者模式详解
- JAVA学习(四):Java流程控制语句(顺序结构、if条件语句、switch条件语句、循环语句与跳转语句)
- java设计模式2--抽象工厂模式(Abstract Factory)
- 【JAVA】Java循环语句中的continue跳转进入下一次循环是否判断循环条件
- 深入理解JAVA虚拟机--Idea远程执行本地Java代码
- Java设计模式之组合Composite模式代码示例
- Java设计模式之策略模式与状态模式
- Java设计模式之《观察者模式》及应用场景
- Java设计模式之代理模式(静态代理和JDK、CGLib动态代理)以及应用场景
- 熬夜学Java语言-设计模式之简单工厂模式
- Interview:Java岗位面试—面试求职攻略之一个JAVA程序员面试心得(非常值得收藏)
- 保留状态的秘密 - 深入了解Java备忘录模式(Memento Pattern)
- Java组合模式:如何通过对象组合实现更高效的代码设计
- Java的二十三种设计模式(适配器模式(Adapter)、对象的适配器模式)
- 3种Java工厂模式深入理解分析
- Java设计模式(十) 备忘录模式 状态模式
- JAVA设计模式之单例模式
- 浅析JAVA设计模式之工厂模式(一)
- Java 帝国之建造者模式
- Java设计模式------------策略模式
- java.lang.OutOfMemoryError: Java heap space
- Java Instrumentation 内存马——主要是利用Instrumentation Java API来做内存注入,会用到反射机制,文中提到检测思路:注入jar包-> dump已加载class字节码->反编译成java代码-> 源码webshell检测
- Java代理模式:如何优雅地控制对象访问?
- Java 设计模式——组合模式