Java設計模式之訪問者模式

2021-08-19 19:22:19 字數 3885 閱讀 2320

//單個單子的介面(相當於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,那是否可以把這個方法提取到另外乙個類中來實現呢...