设计模式java——访问者模式
2018-04-11 22:17
375 查看
访问者模式(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);
}
}
}结果:
4000
访问者模式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);
}
}
}结果:
4000
相关文章推荐
- 【java设计模式】访问者模式
- Java设计模式之访问者模式
- JAVA设计模式之访问者模式详解
- Java设计模式之访问者模式
- Java设计模式--访问者模式
- JAVA设计模式之访问者模式
- java设计模式25_访问者模式
- Java设计模式菜鸟系列(二十三)访问者模式建模与实现
- Java设计模式---访问者模式
- JAVA设计模式(二十二)——访问者模式
- java行为设计模式——访问者模式
- Java设计模式笔记之访问者模式
- java设计模式---访问者模式
- Java设计模式之访问者模式
- JAVA设计模式——访问者模式
- Java设计模式之访问者模式
- Java设计模式之二十五(访问者模式)
- Java开发中的23种设计模式详解----访问者模式(Visitor)
- java设计模式-访问者模式(Visitor)
- Java设计模式(23)——行为模式之访问者模式(Visitor)