Java: Visitor Pattern
/**
* 版权所有 2022 涂聚文有限公司
* 许可信息查看:
* 描述:
* 访问者模式 Visitor Pattern
* 历史版本: JDK 14.02
* 2022-09-12 创建者 geovindu
* 2022-09-12 添加 Lambda
* 2022-09-12 修改:date
* 接口类
* 2022-09-12 修改者:Geovin Du
* 生成API帮助文档的指令:
* javadoc - -encoding Utf-8 -d apidoc Case.java
* Interface
* Record
* Annotation
* Enum
*
* */
package com.javapatterns.visitor;
/**
*
* */
public class Case extends Equipment
{
/**
*
* */
public double price()
{
return 30.00;
}
/**
*
* */
public void accept(Visitor v)
{
System.out.println("Case has been visited.");
v.visitCase(this);
}
}
/**
* 版权所有 2022 涂聚文有限公司
* 许可信息查看:
* 描述:
* 访问者模式 Visitor Pattern
* 历史版本: JDK 14.02
* 2022-09-12 创建者 geovindu
* 2022-09-12 添加 Lambda
* 2022-09-12 修改:date
* 接口类
* 2022-09-12 修改者:Geovin Du
* 生成API帮助文档的指令:
* javadoc - -encoding Utf-8 -d apidoc Composite.java
* Interface
* Record
* Annotation
* Enum
*
* */
package com.javapatterns.visitor;
import java.util.Vector;
/**
*
* */
abstract class Composite extends Equipment
{
/**
*
* */
private Vector parts = new Vector(10);
/**
*
* */
public Composite()
{
}
/**
*
* */
public void add(Equipment equip)
{
parts.add(equip);
}
/**
*
* */
public double price()
{
double total=0;
for (int i=0; i < parts.size(); i++)
{
total += ((Equipment) parts.get(i)).price();
}
return total;
}
/**
*
* */
public void accept(Visitor v)
{
for (int i=0; i < parts.size(); i++)
{
((Equipment) parts.get(i)).accept(v);
}
}
}
/**
* 版权所有 2022 涂聚文有限公司
* 许可信息查看:
* 描述:
* 访问者模式 Visitor Pattern
* 历史版本: JDK 14.02
* 2022-09-12 创建者 geovindu
* 2022-09-12 添加 Lambda
* 2022-09-12 修改:date
* 接口类
* 2022-09-12 修改者:Geovin Du
* 生成API帮助文档的指令:
* javadoc - -encoding Utf-8 -d apidoc Cpu.java
* Interface
* Record
* Annotation
* Enum
*
* */
package com.javapatterns.visitor;
/**
*
* */
public class Cpu extends Equipment
{
/**
*
* */
public double price()
{
return 800.00;
}
/**
*
* */
public void accept(Visitor v)
{
System.out.println("CPU has been visited.");
v.visitCpu(this);
}
}
/**
* 版权所有 2022 涂聚文有限公司
* 许可信息查看:
* 描述:
* 访问者模式 Visitor Pattern
* 历史版本: JDK 14.02
* 2022-09-12 创建者 geovindu
* 2022-09-12 添加 Lambda
* 2022-09-12 修改:date
* 接口类
* 2022-09-12 修改者:Geovin Du
* 生成API帮助文档的指令:
* javadoc - -encoding Utf-8 -d apidoc Equipment.java
* Interface
* Record
* Annotation
* Enum
*
* */
package com.javapatterns.visitor;
/**
*
* */
public abstract class Equipment {
/**
*
* */
public abstract void accept(Visitor vis);
/**
*
* */
public abstract double price();
}
/**
* 版权所有 2022 涂聚文有限公司
* 许可信息查看:
* 描述:
* 访问者模式 Visitor Pattern
* 历史版本: JDK 14.02
* 2022-09-12 创建者 geovindu
* 2022-09-12 添加 Lambda
* 2022-09-12 修改:date
* 接口类
* 2022-09-12 修改者:Geovin Du
* 生成API帮助文档的指令:
* javadoc - -encoding Utf-8 -d apidoc HardDisk.java
* Interface
* Record
* Annotation
* Enum
*
* */
package com.javapatterns.visitor;
/**
*
* */
public class HardDisk extends Equipment
{
/**
*
* */
public double price()
{
return 200.00;
}
/**
*
* */
public void accept(Visitor v)
{
System.out.println("HardDisk has been visited.");
v.visitHardDisk(this);
}
}
/**
* 版权所有 2022 涂聚文有限公司
* 许可信息查看:
* 描述:
* 访问者模式 Visitor Pattern
* 历史版本: JDK 14.02
* 2022-09-12 创建者 geovindu
* 2022-09-12 添加 Lambda
* 2022-09-12 修改:date
* 接口类
* 2022-09-12 修改者:Geovin Du
* 生成API帮助文档的指令:
* javadoc - -encoding Utf-8 -d apidoc IntegratedBoard.java
* Interface
* Record
* Annotation
* Enum
*
* */
package com.javapatterns.visitor;
/**
*
* */
public class IntegratedBoard extends Composite
{
/**
*
* */
public IntegratedBoard()
{
super.add(new MainBoard());
super.add(new Cpu());
}
/**
*
* */
public void accept(Visitor v)
{
System.out.println("IntegratedBoard has been visited.");
super.accept(v);
}
}
/**
* 版权所有 2022 涂聚文有限公司
* 许可信息查看:
* 描述:
* 访问者模式 Visitor Pattern
* 历史版本: JDK 14.02
* 2022-09-12 创建者 geovindu
* 2022-09-12 添加 Lambda
* 2022-09-12 修改:date
* 接口类
* 2022-09-12 修改者:Geovin Du
* 生成API帮助文档的指令:
* javadoc - -encoding Utf-8 -d apidoc InventoryVisitor.java
* Interface
* Record
* Annotation
* Enum
*
* */
package com.javapatterns.visitor;
import java.util.Vector;
/**
*
* */
public class InventoryVisitor extends Visitor
{
/**
*
* */
private Vector inv;
/**
*
* */
public InventoryVisitor()
{
inv = new Vector(10,5);
}
/**
*
* */
public int size()
{
return inv.size();
}
/**
*
* */
public void visitCase(Case e)
{
inv.addElement(e);
}
/**
*
* */
public void visitCpu(Cpu e)
{
inv.addElement(e);
}
/**
*
* */
public void visitHardDisk(HardDisk e)
{
inv.addElement(e);
}
/**
*
* */
public void visitIntegratedBoard(IntegratedBoard e)
{
inv.addElement(e);
}
/**
*
* */
public void visitMainBoard(MainBoard e)
{
inv.addElement(e);
}
/**
*
* */
public void visitPc(Pc e)
{
inv.addElement(e);
}
}
/**
* 版权所有 2022 涂聚文有限公司
* 许可信息查看:
* 描述:
* 访问者模式 Visitor Pattern
* 历史版本: JDK 14.02
* 2022-09-12 创建者 geovindu
* 2022-09-12 添加 Lambda
* 2022-09-12 修改:date
* 接口类
* 2022-09-12 修改者:Geovin Du
* 生成API帮助文档的指令:
* javadoc - -encoding Utf-8 -d apidoc MainBoard.java
* Interface
* Record
* Annotation
* Enum
*
* */
package com.javapatterns.visitor;
/**
*
* */
public class MainBoard extends Equipment
{
/**
*
* */
public double price()
{
return 100.00;
}
/**
*
* */
public void accept(Visitor v)
{
System.out.println("MainBoard has been visited.");
v.visitMainBoard(this);
}
}
/**
* 版权所有 2022 涂聚文有限公司
* 许可信息查看:
* 描述:
* 访问者模式 Visitor Pattern
* 历史版本: JDK 14.02
* 2022-09-12 创建者 geovindu
* 2022-09-12 添加 Lambda
* 2022-09-12 修改:date
* 接口类
* 2022-09-12 修改者:Geovin Du
* 生成API帮助文档的指令:
* javadoc - -encoding Utf-8 -d apidoc Pc.java
* Interface
* Record
* Annotation
* Enum
*
* */
package com.javapatterns.visitor;
/**
*
* */
public class Pc extends Composite
{
/**
*
* */
public Pc()
{
super.add(new IntegratedBoard());
super.add(new HardDisk());
super.add(new Case());
}
/**
*
* */
public void accept(Visitor v)
{
System.out.println("Pc has been visited.");
super.accept(v);
}
}
/**
* 版权所有 2022 涂聚文有限公司
* 许可信息查看:
* 描述:
* 访问者模式 Visitor Pattern
* 历史版本: JDK 14.02
* 2022-09-12 创建者 geovindu
* 2022-09-12 添加 Lambda
* 2022-09-12 修改:date
* 接口类
* 2022-09-12 修改者:Geovin Du
* 生成API帮助文档的指令:
* javadoc - -encoding Utf-8 -d apidoc PriceVisitor.java
* Interface
* Record
* Annotation
* Enum
*
* */
package com.javapatterns.visitor;
/**
*
* */
public class PriceVisitor extends Visitor{
/**
*
* */
private float total;
/**
*
* */
public PriceVisitor()
{
total = 0;
}
/**
*
* */
public float value()
{
return total;
}
/**
*
* */
public void visitCase(Case e)
{
total += e.price();
}
/**
*
* */
public void visitCpu(Cpu e)
{
total += e.price();
}
/**
*
* */
public void visitHardDisk(HardDisk e)
{
total += e.price();
}
/**
*
* */
public void visitIntegratedBoard(IntegratedBoard e)
{
total += e.price();
}
/**
*
* */
public void visitMainBoard(MainBoard e)
{
total += e.price();
}
/**
*
* */
public void visitPc(Pc e)
{
total += e.price();
}
}
/**
* 版权所有 2022 涂聚文有限公司
* 许可信息查看:
* 描述:
* 访问者模式 Visitor Pattern
* 历史版本: JDK 14.02
* 2022-09-12 创建者 geovindu
* 2022-09-12 添加 Lambda
* 2022-09-12 修改:date
* 接口类
* 2022-09-12 修改者:Geovin Du
* 生成API帮助文档的指令:
* javadoc - -encoding Utf-8 -d apidoc Visitor.java
* Interface
* Record
* Annotation
* Enum
*
* */
package com.javapatterns.visitor;
/**
*
* */
public abstract class Visitor {
/**
*
* */
public abstract void visitCase(Case e);
/**
*
* */
public abstract void visitCpu(Cpu e);
/**
*
* */
public abstract void visitHardDisk(HardDisk e);
/**
*
* */
public abstract void visitIntegratedBoard(IntegratedBoard e);
/**
*
* */
public abstract void visitMainBoard(MainBoard e);
/**
*
* */
public abstract void visitPc(Pc e);
}
调用:
//参观者模式
PriceVisitor pv;
InventoryVisitor iv;
Equipment equip;
equip = new Pc();
pv = new PriceVisitor();
equip.accept(pv);
System.out.println("Price: " + pv.value() );
System.out.println("\n");
iv = new InventoryVisitor();
equip.accept(iv);
System.out.println("Number of parts: " + iv.size());
输出:
Pc has been visited. IntegratedBoard has been visited. MainBoard has been visited. CPU has been visited. HardDisk has been visited. Case has been visited. Price: 1130.0 Pc has been visited. IntegratedBoard has been visited. MainBoard has been visited. CPU has been visited. HardDisk has been visited. Case has been visited. Number of parts: 4
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
浙公网安备 33010602011771号