java设计模式--访问者模式
发布日期:2021-05-15 01:31:18 浏览次数:22 分类:精选文章

本文共 7298 字,大约阅读时间需要 24 分钟。

������������������Visitor���������������

���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Element������������������������������������������������������������������������������������������������������������������������������������������

������������������������������������������������������������������������������������Staff���������������������������������������������������������CEO���CTO���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

������������

���������������������������������������������������������������

  • Visitor������/������������������������������������������������������������������������������������������������������������������Engineer���Manager������������������������������������������������������������������
  • ConcreteVisitor���������������������Visitor������������������������������������������������������������������������������������������������������������������������������������������������
  • Element������/���������������������������������������������accept���������������������������������������������������������������������������������������������������������������������������Element������������accept������������������������������������������
  • ElementA���ElementB���������������������������������������������Element���������������������������������������������������������������������������������������������������������������������������������������������������������������������
  • ObjectStructure���������/������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

���������������������������������������������������������������������������������Element���������Visitor������������������������������������������������������������������������������������������������������������

������������

���������������������������������������������������������������

  • ���������������������������������������������������������������������������������
  • ���������������Element������������������������������������������������������������������������������������������Visitor���������������������������������
  • ������������Element���������������������������������������������������������������������������

������������������������������������������������������������������������������������������CEO������������������������������������������������KPI������������������������CTO������������������������������������������������������������������������������������������������������������������������������������Visitor���������������������������������������������������������Element������

������������

���������������������������������������������������������������������������������������������������������

���������������������������Staff������������������������������������������

public abstract class Staff {
protected String name;
protected int kpi;
public Staff(String name) {
this.name = name;
this.kpi = new Random().nextInt(10);
}
// ���������������������Visitor���������
public abstract void accept(Visitor visitor);
}

������������������������������������������������Engineer���Manager���������������������Staff���������������������������������������

public class Engineer extends Staff {
public Engineer(String name) {
super(name);
}
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
// ���������������������������
public int getCodeLines() {
return new Random().nextInt(10 * 10000);
}
}

public class Manager extends Staff {
public Manager(String name) {
super(name);
}
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
// ���������������������������������
public int getProducts() {
return new Random().nextInt(10);
}
}

������������������������������������������������������������BusinessReport������������������������������������������Visitor���������������������

public class BusinessReport {
private List mStaffs = new LinkedList<>();
public BusinessReport() {
// ���������������������
mStaffs.add(new Manager("������-A"));
mStaffs.add(new Engineer("���������-A"));
mStaffs.add(new Engineer("���������-B"));
mStaffs.add(new Engineer("���������-C"));
mStaffs.add(new Manager("������-B"));
mStaffs.add(new Engineer("���������-D"));
}
// ������������������
public void showReport(Visitor visitor) {
System.out.println("=== ������������ ===");
for (Staff staff : mStaffs) {
staff.accept(visitor);
}
}
}

������������������������������������������������������������������������������CEOVisitor���CTOVisitor������������������������������������������

public interface Visitor {
void visit(Engineer engineer);
void visit(Manager manager);
}
public class CEOVisitor implements Visitor {
@Override
public void visit(Engineer engineer) {
System.out.println("���������: " + engineer.getName() + ", KPI: " + engineer.getKpi());
}
@Override
public void visit(Manager manager) {
System.out.println("������: " + manager.getName() + ", KPI: " + manager.getKpi() +
", ���������������: " + manager.getProducts());
}
}

public class CTOVisitor implements Visitor {
@Override
public void visit(Engineer engineer) {
System.out.println("���������: " + engineer.getName() + ", ������������: " + engineer.getCodeLines());
}
@Override
public void visit(Manager manager) {
System.out.println("������: " + manager.getName() + ", ������������: " + manager.getProducts());
}
}

������������������������������������������������������������

public class Client {
public static void main(String[] args) {
BusinessReport report = new BusinessReport();
System.out.println("=========== CEO������������ ===========");
report.showReport(new CEOVisitor());
System.out.println("\n=========== CTO������������ ===========");
report.showReport(new CTOVisitor());
}
}

������

���������������������������������������������������������������������������������������Staff������������������������������������������������������������������������Element������Engineer���Manager���������������������������������������������������Visitor������������������������������Element���������������������������ConcreteVisitor������������������������������������������������������������

���������������������������������������������������������������������������������������������������������������������������������������������������Element������������������������������������������������Element���������������������Visitor������������������������������������

������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

上一篇:java设计模式--适配器模式
下一篇:java设计模式--模板方法模式

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月15日 21时02分19秒