91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么中JAVA項目中實現一個訪問者模式

發布時間:2020-11-30 17:14:09 來源:億速云 閱讀:123 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關怎么中JAVA項目中實現一個訪問者模式,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

訪問者模式:

一個作用于某對象結構中各元素的操作,使你可以在不改變各元素類數據結構的前提下增加作用于這些元素的新操作。

結構對象是訪問者模式必備條件,且這個結構對象必須存在遍歷自身各個對象的方法。

適用于:數據結構相對穩定,把數據結構和作用與其上的其它操作解耦,使得操作相對自由。

優點:

1、符合單一職責原則
2、擴展性良好:元素類可以通過接受不同的訪問者來實現對不同操作的擴展。

缺點:

1、如果要增加新元素,則會讓操作變得更復雜
2、在一定程序上破壞了封裝性原則

訪問者械五大角色對象:

1.Visitor 抽象訪問者角色
2.ConcreteVisitor.具體訪問者角色
3.Element 接受訪問操作元素
4.ConcreteElement 具體元素
5.ObjectStructure 結構對象角色,這是使用訪問者模式必備的角色。

/**
 * 抽象訪問者:為該對象結構中具體元素角色聲明一個訪問操作接口。
 * 該操作接口的名字和參數標識了發送訪問請求給具體訪問者的具體元素角色,
 * 這樣訪問者就可以通過該元素角色的特定接口直接訪問它。
 * @description:
 * @date 2016-1-15 下午4:00:29
 */
public interface Visitor {
  void visit(Element element);
}
/**
 * 具體訪問者角色,實現Visitor聲明的接口。
 * @description:
 * @date 2016-1-15 下午4:20:46
 */
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());//
  }
}
/**
 * 定義一個接受訪問操作類,訪問者(Visitor)操作函數的參數。
 * @description:
 * @date 2016-1-15 下午3:58:28
 */
public abstract class Element {
  public abstract void Acceppt(Visitor visitor);
}
/**
 * 具體元素,實現了抽象元素(Element)所定義的接受操作接口。
 * @description:
 * @date 2016-1-15 下午4:04:24
 */
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);
  }
}
/**
 * 結構對象:這是使用訪問者模式必備的角色。
 * 它具備以下特性:
 * 能枚舉它的元素;
 * 可以提供一個高層接口以允許訪問者訪問它的元素;
 * 如有需要,可以設計成一個復合對象或者一個聚集(如一個列表或無序集合)。
 * @description:
 * @date 2016-1-15 下午4:26:30
 */
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項目中實現一個訪問者模式就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

商城县| 霍州市| 尤溪县| 屯留县| 麻江县| 黔江区| 攀枝花市| 宁陵县| 尤溪县| 阿合奇县| 张家界市| 芷江| 衡山县| 明星| 邵武市| 安康市| 开化县| 甘孜县| 喀喇沁旗| 普定县| 新河县| 盐城市| 达日县| 闸北区| 榆树市| 肇东市| 镶黄旗| 沈阳市| 泊头市| 清徐县| 承德市| 合水县| 昭觉县| 双桥区| 牡丹江市| 侯马市| 筠连县| 宜昌市| 九台市| 秦安县| 齐齐哈尔市|