这篇文章将为大家详细讲解有关怎么中JAVA项目中实现一个访问者模式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
访问者模式:
一个作用于某对象结构中各元素的操作,使你可以在不改变各元素类数据结构的前提下增加作用于这些元素的新操作。
结构对象是访问者模式必备条件,且这个结构对象必须存在遍历自身各个对象的方法。
适用于:数据结构相对稳定,把数据结构和作用与其上的其它操作解耦,使得操作相对自由。
优点:
符合单一职责原则
2、扩展性良好:元素类可以通过接受不同的访问者来实现对不同操作的扩展。
缺点:
如果要增加新元素,则会让操作变得更复杂
2、在一定程序上破坏了封装性原则
访问者械五大角色对象:
Visitor 抽象访问者角色
2.ConcreteVisitor.具体访问者角色
3.Element 接受访问操作元素
4.ConcreteElement 具体元素
5.ObjectStructure 结构对象角色,这是使用访问者模式必备的角色。
public interface Visitor { void visit(Element element);}
public class ConcreteVisitor implements Visitor{ @Override public void visit(Element element) { Staff e=(Staff) element; //比如:加薪的计算方式:职位*加薪系数+工龄*对应系统之和 除以10 再乘以现在工资 System.out.println(e.getName()+"要加的薪水是:"+(e.getDegree()*0.8+e.getWorkAges()*0.5)/10*e.getSalary());// }}
public abstract class Element { public abstract void Acceppt(Visitor visitor);}
public class Staff extends Element { private String name; private float salary; private int workAges; private int degree; public Staff(String name, float salary, int workAges, int degree) { super(); this.name = name; this.salary = salary; this.workAges = workAges; this.degree = degree; } public String getName() { return name; } public void setName(String name) { this.name = name; } public float getSalary() { return salary; } public void setSalary(float salary) { this.salary = salary; } public int getWorkAges() { return workAges; } public void setWorkAges(int workAges) { this.workAges = workAges; } public int getDegree() { return degree; } public void setDegree(int degree) { this.degree = degree; } @Override public void Acceppt(Visitor visitor) { visitor.visit(this); }}
public class StaffObject { private HashMap<String, Staff> employees; public StaffObject() { employees = new HashMap<String, Staff>(); } public void addEmployee(Staff e) { if (!employees.containsKey(e.getName())) { employees.put(e.getName(), e); } } public void removeEmployee(Staff e) { if (employees.containsKey(e.getName())) { employees.remove(e); } } public Staff getEmployee(String name) { return employees.get(name); } public void Accept(Visitor v) { for (Staff e : employees.values()) { e.Acceppt(v); } }}
测试类
public class Test { public static void main(String[] args) { StaffObject e=new StaffObject(); e.addEmployee(new Staff("张三", 3000f, 2, 1)); e.addEmployee(new Staff("李四", 5000f, 4, 2)); e.addEmployee(new Staff("王五", 8000f, 6, 3)); e.addEmployee(new Staff("沈七", 10000f, 9, 4)); e.Accept(new ConcreteVisitor()); }}
运行结果:
李四要加的薪水是:1800.0张三要加的薪水是:540.0沈七要加的薪水是:7700.0王五要加的薪水是:4320.0
关于怎么中JAVA项目中实现一个访问者模式就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。