案例:计价员拿到采购单之后根据采购单物品名称和数量计算总价,采购员根据采购单名称和数量采购。采购单看作采购物集合,不同操作人员对采购单进行不同处理。
- 包含访问者和被访问元素两个主要组成。被访问元素通常有不同的类型,不同访问者可对它们进行不同访问操作。
- 被访问元素通常不单独存在,存储在一个集合中,集合被称为“对象结构”,访问者遍历对象结构对存储的元素逐个操作。
抽象访问者:为对象结构中每一个具体元素声明一个访问操作,从这个操作名称或参数类型可以清楚知道需要访问的具体元素的类型
//抽象访问者 abstract class Department { public abstract void visit(FulltimeEmployee employee); public abstract void visit(ParttimeEmployee employee); }
具体访问者:实现了每个由抽象访问者声明的操作,每一个操作用于访问对象结构中一种类型元素
//财务部类:具体访问者类 class FADepartment extends Department { //实现财务部对全职员工的访问 public void visit(FulltimeEmployee employee) { int workTime = employee.getWorkTime(); double weekWage = employee.getWeeklyWage(); if (workTime > 40) { weekWage = weekWage + (workTime - 40) * 100; } else if (workTime < 40) { weekWage = weekWage - (40 - workTime) * 80; if (weekWage < 0) { weekWage = 0; } } System.out.println("正式员工" + employee.getName() + "实际工资为:" + weekWage + "元。"); } //实现财务部对兼职员工的访问 public void visit(ParttimeEmployee employee) { int workTime = employee.getWorkTime(); double hourWage = employee.getHourWage(); System.out.println("临时工" + employee.getName() + "实际工资为:" + workTime * hourWage + "元。"); } }
//人力资源部类:具体访问者类 class HRDepartment extends Department { //实现人力资源部对全职员工的访问 public void visit(FulltimeEmployee employee) { int workTime = employee.getWorkTime(); System.out.println("正式员工" + employee.getName() + "实际工作时间为:" + workTime + "小 if (workTime > 40) { System.out.println("正式员工" + employee.getName() + "加班时间为:" + (workTime - 40) + "小时。"); } else if (workTime < 40) { System.out.println("正式员工" + employee.getName() + "请假时间为:" + (40 - workTime) + } } //实现人力资源部对兼职员工的访问 public void visit(ParttimeEmployee employee) { int workTime = employee.getWorkTime(); System.out.println("临时工" + employee.getName() + "实际工作时间为:" + workTime + "小时。"); } }
抽象元素:抽象元素一般是抽象类或者接口,定义一个accept()方法,该方法通常以一个抽象访问者作为参数。
interface Employee { //接受一个抽象访问者访问 public void accept(Department handler); }
具体元素:实现了accept方法,在accept方法中调用访问者的访问方法完成对一个元素的操作。
class FullTimeEmployee implements Employee { private String name; private double weeklyWage; private int workTime; public FullTimeEmployee(String name, double weeklyWage, int workTime) { this.name = name; this.weeklyWage = weeklyWage; this.workTime = workTime; } public void setName(String name) { this.name = name; } public void setWeeklyWage(double weeklyWage) { this.weeklyWage = weeklyWage; } public void setWorkTime(int workTime) { this.workTime = workTime; } public String getName() { return (this.name); } public double getWeeklyWage() { return (this.weeklyWage); } public int getWorkTime() { return (this.workTime); } public void accept(Department handler) { handler.visit(this); //调用访问者的访问方法 } }
class PartTimeEmployee implements Employee { private String name; private double hourWage; private int workTime; public PartTimeEmployee(String name, double hourWage, int workTime) { this.name = name; this.hourWage = hourWage; this.workTime = workTime; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getHourWage() { return hourWage; } public void setHourWage(double hourWage) { this.hourWage = hourWage; } public int getWorkTime() { return workTime; } public void setWorkTime(int workTime) { this.workTime = workTime; } public void accept(Department handler) { handler.visit(this); //调用访问者的访问方法 } }
相关推荐
访问者模式(Visitor)是一种行为设计模式,它允许在不修改对象结构的前提下向对象结构中的元素添加新的操作。这种模式将算法与数据结构分离,使得算法可以独立于数据结构进行变化,增强了系统的可扩展性。 在C++中...
《访问者模式在实际开发中的应用深度解析》 访问者模式是设计模式中的一种行为模式,它在实际的软件开发中具有重要的应用价值。通过理解并掌握访问者模式,开发者可以更好地实现对象结构中元素的操作,同时保持元素...
**访问者模式**是一种行为设计模式,它允许在不修改对象结构的情况下添加新的操作。这种模式主要用于处理具有复杂对象结构的情况,使得我们可以对结构中的每个元素执行特定操作,而无需暴露其内部实现。 访问者模式...
**访问者模式**是一种设计模式,它在软件工程中用于在不修改对象结构的前提下,为对象添加新的操作或行为。这种模式将数据结构与数据操作分离,使得可以在不改变对象本身的情况下扩展其功能。访问者模式是行为设计...
访问者模式是一种设计模式,属于行为模式类别,其主要目的是在不修改对象结构的前提下,为对象结构中的元素提供新的操作。这种模式的核心思想是将数据结构与数据操作分离,使得增加新的操作变得容易,同时也避免了对...
**访问者模式** 访问者模式(Visitor Pattern)是一种行为设计模式,它使你能在不修改对象结构的前提下向其添加新的操作。这种模式常用于处理具有相同接口或抽象类的对象结构,使得可以在不改变原有结构的基础上...
访问者模式是一种设计模式,它在对象结构中定义了一个访问并操作其元素的接口。这种模式主要用于在不改变对象结构的前提下增加对象的功能。在“访问者模式例子2”中,我们将深入探讨如何利用该模式来扩展系统的行为...
【访问者模式】是一种行为设计模式,其主要目的是在不修改已有对象结构的前提下,为对象增加新的操作。这种模式在23种经典设计模式中属于较为复杂的一种,因为它的理解和应用相对困难,可能导致代码可读性和可维护性...
访问者模式是一种设计模式,属于行为模式类别,它在软件工程中被用来分离对象结构与对这个结构进行操作的行为。这种模式的主要目的是使代码结构更加灵活,同时增加新的操作而无需修改现有对象结构。在“访问者模式”...
访问者模式是一种软件设计模式,它在对象结构中定义了一个访问者的接口,使得该访问者可以访问该结构中的每一个元素,同时不影响对象结构本身。这种模式的主要目的是将数据操作与数据结构分离,使得数据结构的变化...
访问者模式是一种软件设计模式,它在对象结构中定义了一个访问者的接口,使得该访问者可以访问该结构中的每一个元素,同时不影响这些元素自身的行为。这种模式的主要目的是将数据操作和业务逻辑分离,使得数据结构...
**访问者模式(Visitor)详解** 访问者模式是一种行为设计模式,它使你可以在不修改对象结构的情况下,为对象添加新的操作。这种模式的核心在于将数据结构与对这些数据的操作解耦,使得增加新的操作变得容易,同时...
访问者模式是一种软件设计模式,它允许在不改变对象结构的情况下,在对象的现有结构上增加新的操作。在Java中,这种模式尤其有用,因为它能够帮助我们保持类的封装性,同时提供了一种灵活的方式来扩展对象的功能。...
**访问者模式详解** 访问者模式是一种行为设计模式,它允许在不修改对象结构的情况下向对象添加新的操作。这种模式的核心思想是将数据结构与算法分离,使得算法可以在不改变对象结构的前提下增加对对象的操作。 在...
访问者模式是一种软件设计模式,属于行为模式范畴,它的核心思想是将数据结构与数据操作分离,使得在不修改原有对象结构的情况下,可以为对象添加新的操作。这种模式常用于处理具有复杂对象结构且需要对这些对象进行...
**访问者模式**是软件设计模式中的一种结构型模式,它允许在不修改对象结构的情况下,在对象上增加新的操作。这种模式将数据结构与数据操作分离,使得代码更易于维护和扩展。 在Java中实现访问者模式,通常包括以下...
**访问者模式(Visitor Pattern)**是一种行为设计模式,它提供了一种在不修改对象结构的情况下增加新操作的方法。这种模式的主要思想是将数据结构与算法分离,使得算法可以在不改变对象结构的情况下独立变化。 在...
访问者模式是一种设计模式,主要用于在不修改原有类层次结构的基础上,增加新的操作或功能。在UML(统一建模语言)文档中,访问者模式通常用于表示对象结构中的类如何接受并处理来自访问者的访问请求。这个模式的...