//單個單子的介面(相當於element)
public
inte***ce bill
//消費的單子
public
class
consumebill
implements
bill
public
void
accept(accountbookviewer viewer)
public
double
getamount()
public string getitem()
}
//收入單子
public
class
incomebill
implements
bill
public
void
accept(accountbookviewer viewer)
public
double
getamount()
public string getitem()
}
//賬單檢視者介面(相當於visitor)
public
inte***ce accountbookviewer
//老闆類,檢視賬本的類之一
public
class
boss
implements
accountbookviewer
public
void
view(incomebill bill)
public
double
gettotalincome()
public
double
gettotalconsume()
}
//註冊會計師類,檢視賬本的類之一
public
class
cpaimplements
accountbookviewer
}//如果是收入,則所有的收入都要交稅
public
void
view(incomebill bill)
}
//賬本類(相當於objectstruture)
public
class accountbook
//供賬本的檢視者檢視賬本
public
void
show(accountbookviewer viewer)
}}
public
class client
}
list
list = null;
list = new arraylist();
靜態分派就是按照變數的靜態型別進行分派,從而確定方法的執行版本,靜態分派在編譯時期就可以確定方法的版本。而靜態分派最典型的應用就是方法過載
public
class main
public
void
test(integer integer)
public
static
void
main(string args)
}
對於動態分派,與靜態相反,它不是在編譯期確定的方法版本,而是在執行時才能確定。而動態分派最典型的應用就是多型的特性
inte***ce
person
class
manimplements
person
}class
woman
implements
person
}public
class
main
}
for (bill bill : billlist)
public
void
accept(accountbookviewer viewer)
//單個單子的介面(相當於element)
public
inte***ce bill
//抽象單子類,乙個高層次的單子抽象
public
abstract
class
abstractbill
implements
bill
public
double
getamount()
public string getitem()
}
//收入單子
public
class
incomebill
extends
abstractbill
public
void
accept(viewer viewer)
viewer.viewabstractbill(this);
}}
//消費的單子
public
class
consumebill
extends
abstractbill
public
void
accept(viewer viewer)
viewer.viewabstractbill(this);
}}
//超級訪問者介面(它支援定義高層操作)
public
inte***ce viewer
//比viewer介面低乙個層次的訪問者介面
public
abstract
class
abstractviewer
implements
viewer
}
//老闆類,檢視賬本的類之一,作用於最低層次結構
public
class
boss
extends
abstractviewer
public
void
viewincomebill(incomebill bill)
public
double
gettotalincome()
public
double
gettotalconsume()
}
//註冊會計師類,檢視賬本的類之一,作用於最低層次結構
public
class
cpaextends
abstractviewer
}//如果是收入,則所有的收入都要交稅
public
void
viewincomebill(incomebill bill)
}
//財務主管類,檢視賬本的類之一,作用於高層的層次結構
public
class
cfoimplements
viewer
}
public
class client
}
Java設計模式之訪問者模式
訪問者的基本想法是 軟體系統擁有乙個由許多物件構成的 比較穩定的物件結構,這些物件的類都擁有乙個accept方法用來接收對訪問者物件的訪問,而訪問者是乙個介面,他擁有乙個visit方法,這個方法對訪問到的物件結構中不同型別的元素做出不同的處理。在物件結構的一次訪問過程中,我們遍歷整個物件結構,每乙個...
設計模式(JAVA) 訪問者模式
場景 將公司中所有人員資訊都列印匯報出來,其中假設公司有兩類人員 1.普通員工 2.管理層 不同人員型別的資訊是不同的。訪問者模式 定義 封裝一些作用於某種資料結構中的各元素的操作,它可以在不改變資料結構的前提下定義作用於這些元素的新的操作。包含如下幾個角色 1.visitor 抽象訪問者 抽象類或...
Java設計模式 訪問者模式
訪問者模式 visitor pattern 以列印公司員工的資訊報表為例。下面先看下類圖。使用了乙個模版方法模式,把所要的資訊都列印出來。這樣子寫出來的 就不太符合公司不同管理層的需要,不能滿足各自的需求。每個普通員工類和經理類都乙個方法 report,那是否可以把這個方法提取到另外乙個類中來實現呢...