場景:將公司中所有人員資訊都列印匯報出來,其中假設公司有兩類人員:
1.普通員工
2.管理層
不同人員型別的資訊是不同的。
訪問者模式:
定義:封裝一些作用於某種資料結構中的各元素的操作,它可以在不改變資料結構的前提下定義作用於這些元素的新的操作。
包含如下幾個角色:
1.visitor-抽象訪問者
抽象類或者介面,宣告訪問者可以訪問哪些元素,具體到程式中就是visit方法的引數定義哪些物件是可以被訪問,利用了多型的性質
2.concretevisitor-具體訪問者
它影響訪問者訪問到乙個類後該怎麼幹,要做什麼事。
3.element-抽象元素
介面或者抽象類,宣告接受哪一類訪問者訪問,程式上市通過accept方法中的引數來定義的
4.concreteelement-具體元素
實現accept方法,通常是visitor.visit(this)。
5.objectstruture-結構物件
元素產生者,一般在多個不同類中。
場景問題解決類圖:
主要涉及如下幾個角色:
1.抽象員工
2.普通員工
3.管理階層
4.訪問者介面
5.訪問者實現
6.場景類
**實現:
employee:
public abstract class employee
public void setname(string name)
public int getsalary()
public void setsalary(int salary)
public string get***()
public void set***(string string)
public abstract void accept(ivisitor visitor);
}
commonemployee:
private string job;
public string getjob()
public void setjob(string job)
public void accept(ivisitor visitor)
}
manager:
public class manager extends employee
public void setperformance(string performance)
public void accept(ivisitor visitor)
}
ivisitor:
public inte***ce ivisitor
visitor:
public class visitor implements ivisitor
public void visit(manager manager)
private string getbasicinfo(employee employee)
private string getmanagerinfo(manager manager)
private string getcommonemployeeinfo(commonemployee commonemployee)
}
client:
public class client
}public static listmockemployee()
}
Java設計模式 訪問者模式
訪問者模式 visitor pattern 以列印公司員工的資訊報表為例。下面先看下類圖。使用了乙個模版方法模式,把所要的資訊都列印出來。這樣子寫出來的 就不太符合公司不同管理層的需要,不能滿足各自的需求。每個普通員工類和經理類都乙個方法 report,那是否可以把這個方法提取到另外乙個類中來實現呢...
JAVA設計模式 訪問者模式
訪問者模式一般被使用者一些資料結構穩定的場合,資料物件穩定,而實際對它的操作是不穩定的,他可以接受不同的物件而做出不同的反應,對與穩定的資料結構,它的功能和方法也就穩定,所以就把它抽象出來,抽取出來,而對於訪問它的物件是經常改變的,傳遞不同的實際物件也就得到不同的執行效果,多型的體現 訪問者模式的參...
Java設計模式 訪問者模式
定義 封裝某些作用於某種資料結構中各元素的操作,它可以在不改變資料結構的前提下定義作用於這些元素的新的操作。class a public void method2 b b class b 看一下在類a中,方法method1和方法method2的區別在 方法method1很簡單,就是列印出一句 我是a...