spring增强访问者模式-改造后

This commit is contained in:
fujiayang
2022-01-26 10:37:13 +08:00
parent 86ce1f5d80
commit 3f52da2575
8 changed files with 105 additions and 1 deletions

View File

@@ -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");
}
}

View File

@@ -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);
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}

View File

@@ -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);
}
}

View File

@@ -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;

View File

@@ -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) {