抽象員工
public abstract class employee
public void setname(string name)
public int getsalary()
public void setsalary(int salary)
public int get***()
public void set***(int ***)
// 員工資訊輸出
public final void report()
// 拼裝
protected abstract string getotherinfo();
}
下面是普通員工
public class commonemployee extends employee
public void setjob(string job)
protected string getotherinfo()
}
管理層
public class manager extends employee
public void setperformance(string performance)
protected string getotherinfo()
}
最後場景
public class client
}public static list mockemployee()
}
先定義訪問者介面
public inte***ce ivisitor
訪問者實現
public class visitor implements ivisitor
// 訪問部門經理
public void visit(manager manager)
// 組裝基本資訊
private string getbasicinfo(employee employee)
// 組裝普通員工資訊
private string getcommonemployee(commonemployee commonemployee)
}
繼續書寫抽象員工類
public abstract class employee
public void setname(string name)
public int getsalary()
public void setsalary(int salary)
public int get***()
public void set***(int ***)
// 定義訪問者訪問
public abstract void accept(ivisitor visitor);
}
普通員工
public class commonemployee extends employee
// 設定job
public void setjob(string job)
// 允許訪問者訪問
@override
public void accept(ivsitor visitor)
}
場景類
public class client
}public static list mockemployee()
}
彙總和報表,經常使用統計功能。
即,一堆計算公式,生產出乙個報表。
統計公式員工的工資總額
// 定義抽象訪問者
public inte***ce ivisitor
定義訪問者
// public class visitor implements ivisitor
最後編寫場景類
public class client
system.out.println("");}}
單分派:處理乙個操作根據請求著的名稱和接受到的引數決定
靜態繫結,動態繫結,依據過載,覆寫實現。
栗子
// 定義角色介面,實現類
public inte***ce role
public class kungfurole implements role
public class idiotrole implements role
下面定義抽象演員
public abstract class absactor
// 扮演功夫戲
public void act(kungfurole role)
}
// 青年演員,老年演員
public class youngactor extends absactor
}
// 老年演員喜歡的功夫戲
public class oldactor extends absactor
}
編寫場景
public class client
}
過載在編譯期間決定要呼叫那個方法。
靜態繫結,是重寫的時候就斷定要繫結那個,例如定義年輕演員的時候,重寫的act方法,此時為靜態繫結了kungfurole,
動態繫結呢,act方法,只有在執行的時候才能判斷是和那個繫結
乙個演員可以扮演多個角色,如何實現呢,使用訪問者模式
public inte***ce role
public class kungfurole implements role
}public class ldiotrole implements role
}書寫場景類
public class clicent
}
在上面的栗子中,角色只有在執行期間才能判斷由那個演員執行,演員事先定義和那個角色繫結,所以角色使用介面,演員使用抽象類。
介面,抽象類 介面呢 是在執行的時候才能發現,所以使用動態繫結,抽象類適合使用靜態繫結。啊哈,這就是介面和抽象類的區別。訪問者模式的核心在於定義乙個方法,就像開啟乙個門,讓訪問者進入,然後在將其資訊傳遞給訪問者,由訪問者執行需要產生的內容。
過濾展示,報表,ui展示,過濾器,***
訪問者模式
訪問者模式 visitor pattern 訪問者模式是物件的行為模式。訪問者模式的目的是封裝一些施加於某種資料結構元素之上的操作。一旦這些操作需要修改的話,接受這個操作的資料結構則可以保持不變。一 問題 集合是大多數的系統都要處理的一種容器物件,它儲存了對其它物件的引用。一般情況下,在集合上採取的...
訪問者模式
行為模式中的訪問者模式 訪問者模式是物件的行為模式。訪問者模式的目的是封裝一些施加於某種資料結構元素之上的操作,一旦這些操作需要修改的話,接受這個操作的資料結構則可以保持不變。動機 類層次結構中可能經常由於引入新的操作,從而將型別變得脆弱。在軟體構建過程中,由於需求的改變,某些類層次結構中常常需要增...
訪問者模式
1.說明 namespace visitorspattern 象棋類 public abstract class chess public class redchess chess public class blackchess chess 在贏的情況下的狀態 public class win ac...