訪問者模式

2021-09-12 22:58:34 字數 3445 閱讀 1525

抽象員工

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...