設計模式之訪問者模式

2021-10-06 16:30:16 字數 1992 閱讀 5760

本文根據尚矽谷韓順平老師的設計模式課程編寫設計模式

測評系統

傳統方式的問題

如果系統比較小,還是ok的,但是考慮系統增加越來越多的新功能時,對**改動較大,違反了ocp原則

擴充套件性不好,比如增加了新的人員型別,或者管理方法,都不好做

基本介紹

訪問者模式(visitorpattern),封裝一些作用於某種資料結構的各元素的操作,它可以在不改變資料結構的前提下是義作用於這些元素的新的操作。

主要將資料結構與資料操作分離,解決資料結構和操作耦合性問題

訪問者模式的基本工作原理是:在被訪問的類裡面加乙個對外提供接待訪問者的介面

訪問者模式主要應用場景是:需要對乙個物件結構中的物件進行很多不同操作(這些操作彼此沒有關聯),同時需要避免讓這些操作"汙染"這些物件的類,可以選用訪問者模式解決

角色

visitor 是抽象訪問者。為該物件結構中的concreteelement的每乙個類宣告乙個visit操作

concretevisitor 是乙個具體的訪問值 實現每個有visitor宣告的操作,是每個操作實現的部分

objectstructure 能列舉它的元素,可以提供乙個高層的介面,用來允許訪問者訪問元素

element 定義乙個accept方法,接受乙個訪問者物件

concreteelement 為具體的原色,實現了accept方法

**

public

abstract

class

action

public

class

fail

extends

action

@override

public

void

getwomanresult

(woman woman)

}

public

class

manextends

person

}

public

class

objectstructure

//移除

public

void

detach

(person person)

//顯示測評情況

public

void

display

(action action));

}}

public

abstract

class

person

public

class

success

extends

action

@override

public

void

getwomanresult

(woman woman)

}

/*

* 說明

* 1. 這裡我們使用到了雙分派,即首先在客戶端程式中,將具體狀態作為引數傳遞woman中(第一 次分派)

* 2. 然後woman 類呼叫作為引數的"具體方法"中方法getwomanresult, 同時將自己(this)作為引數傳入,完成第二次的分派

*/public

class

woman

extends

person

}

public

class

client

}

設計模式之訪問者模式

先看一下下面這段 class person public string getaction public void setaction string action public void getconclusion else if action exciting else if action gri...

設計模式之訪問者模式

我們去銀行櫃檯辦業務,一般情況下會開幾個個人業務櫃檯的,你去其中任何乙個櫃檯辦理都是可以的。我們的訪問者模式可以很好付諸在這個場景中 對於銀行櫃檯來說,他們是不用變化的,就是說今天和明天提供個人業務的櫃檯是不需要有變化的。而我們作為訪問者,今天來銀行可能是取消費流水,明天來銀行可能是去辦理手機銀行業...

設計模式之訪問者模式

定義 表示一介作用於某個物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。結構圖 示例 public inte ce vistor public class concretevisitor1 implements vistor override public ...