spring增强访问者模式-改造后
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
package top.fjy8018.designpattern.pattern.behavior.visitor.spring.after;
|
||||
|
||||
import top.fjy8018.designpattern.pattern.behavior.visitor.spring.bean.Building;
|
||||
import top.fjy8018.designpattern.pattern.behavior.visitor.spring.bean.Factory;
|
||||
import top.fjy8018.designpattern.pattern.behavior.visitor.spring.bean.Node;
|
||||
import top.fjy8018.designpattern.pattern.behavior.visitor.spring.bean.School;
|
||||
|
||||
/**
|
||||
* TODO:
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2022/1/26 10:31
|
||||
*/
|
||||
public class DrawVisitor implements Visitor {
|
||||
@Override
|
||||
public void visit(Node node) {
|
||||
System.out.println("draw node");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visit(Factory factory) {
|
||||
System.out.println("draw factory");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visit(Building building) {
|
||||
System.out.println("draw building");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visit(School school) {
|
||||
System.out.println("draw school");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package top.fjy8018.designpattern.pattern.behavior.visitor.spring.after;
|
||||
|
||||
import top.fjy8018.designpattern.pattern.behavior.visitor.spring.bean.Building;
|
||||
import top.fjy8018.designpattern.pattern.behavior.visitor.spring.bean.Factory;
|
||||
import top.fjy8018.designpattern.pattern.behavior.visitor.spring.bean.Node;
|
||||
import top.fjy8018.designpattern.pattern.behavior.visitor.spring.bean.School;
|
||||
|
||||
/**
|
||||
* Visitor Pattern
|
||||
*
|
||||
* @author F嘉阳
|
||||
* @date 2022/1/26 10:31
|
||||
*/
|
||||
public interface Visitor {
|
||||
|
||||
void visit(Node node);
|
||||
|
||||
void visit(Factory factory);
|
||||
|
||||
void visit(Building building);
|
||||
|
||||
void visit(School school);
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package top.fjy8018.designpattern.pattern.behavior.visitor.spring.bean;
|
||||
|
||||
import top.fjy8018.designpattern.pattern.behavior.visitor.spring.after.Visitor;
|
||||
|
||||
/**
|
||||
* TODO:
|
||||
*
|
||||
@@ -16,4 +18,13 @@ public class Building implements Node {
|
||||
public String getDescription() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 调用方知道visit的参数就是Building类型的,并且知道Visitor::visit(Building)方法确实存在,
|
||||
* 因此会直接调用Visitor::visit(Building)方法
|
||||
*/
|
||||
@Override
|
||||
public void accept(Visitor v) {
|
||||
v.visit(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package top.fjy8018.designpattern.pattern.behavior.visitor.spring.bean;
|
||||
|
||||
import top.fjy8018.designpattern.pattern.behavior.visitor.spring.after.Visitor;
|
||||
|
||||
/**
|
||||
* TODO:
|
||||
*
|
||||
@@ -16,4 +18,13 @@ public class Factory implements Node {
|
||||
public String getDescription() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 调用方知道visit的参数就是Factory类型的,并且知道Visitor::visit(Factory)方法确实存在,
|
||||
* 因此会直接调用Visitor::visit(Factory)方法
|
||||
*/
|
||||
@Override
|
||||
public void accept(Visitor v) {
|
||||
v.visit(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package top.fjy8018.designpattern.pattern.behavior.visitor.spring.bean;
|
||||
|
||||
import top.fjy8018.designpattern.pattern.behavior.visitor.spring.after.Visitor;
|
||||
|
||||
/**
|
||||
* 地图节点
|
||||
*
|
||||
@@ -11,4 +13,6 @@ public interface Node {
|
||||
String getName();
|
||||
|
||||
String getDescription();
|
||||
|
||||
void accept(Visitor v);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package top.fjy8018.designpattern.pattern.behavior.visitor.spring.bean;
|
||||
|
||||
import top.fjy8018.designpattern.pattern.behavior.visitor.spring.after.Visitor;
|
||||
|
||||
/**
|
||||
* TODO:
|
||||
*
|
||||
@@ -16,4 +18,13 @@ public class School implements Node {
|
||||
public String getDescription() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 调用方知道visit的参数就是School类型的,并且知道Visitor::visit(School)方法确实存在,
|
||||
* 因此会直接调用Visitor::visit(School)方法
|
||||
*/
|
||||
@Override
|
||||
public void accept(Visitor v) {
|
||||
v.visit(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package top.fjy8018.designpattern.pattern.behavior.visitor.spring;
|
||||
package top.fjy8018.designpattern.pattern.behavior.visitor.spring.before;
|
||||
|
||||
import top.fjy8018.designpattern.pattern.behavior.visitor.spring.bean.Building;
|
||||
import top.fjy8018.designpattern.pattern.behavior.visitor.spring.bean.Factory;
|
||||
@@ -2,10 +2,13 @@ package top.fjy8018.designpattern.pattern.behavior.visitor.spring;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import top.fjy8018.designpattern.pattern.behavior.visitor.spring.after.DrawVisitor;
|
||||
import top.fjy8018.designpattern.pattern.behavior.visitor.spring.after.Visitor;
|
||||
import top.fjy8018.designpattern.pattern.behavior.visitor.spring.bean.Building;
|
||||
import top.fjy8018.designpattern.pattern.behavior.visitor.spring.bean.Factory;
|
||||
import top.fjy8018.designpattern.pattern.behavior.visitor.spring.bean.Node;
|
||||
import top.fjy8018.designpattern.pattern.behavior.visitor.spring.bean.School;
|
||||
import top.fjy8018.designpattern.pattern.behavior.visitor.spring.before.DrawService;
|
||||
|
||||
/**
|
||||
* DrawService中只有4个draw方法,参数类型分别是Factory, Building, School和Node,如果调用方传了一个City进来怎么办?
|
||||
@@ -26,6 +29,13 @@ class DrawServiceTest {
|
||||
draw(new Factory());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void draw2() {
|
||||
Visitor drawVisitor = new DrawVisitor();
|
||||
Factory factory = new Factory();
|
||||
factory.accept(drawVisitor);
|
||||
}
|
||||
|
||||
private void draw(Node node) {
|
||||
DrawService drawService = new DrawService();
|
||||
if (node instanceof Building) {
|
||||
|
||||
Reference in New Issue
Block a user