設計模式 迭代器模式(職責鏈模式)

2021-10-06 23:53:10 字數 3953 閱讀 8723

迭代器模式(iterator pattern):提供一種方法來訪問聚合物件,而不用暴露這個物件的內部表示,其別名為游標(cursor)。迭代器模式是一種物件行為型模式。

源**:v1.0

package org.zangyu.iterator;

public

class

iterator

}//申請:小菜請求加薪2000/小菜請假3天

class

request

public

void

setrequesttype

(string requesttype)

public string getrequestcontent()

public

void

setrequestcontent

(string requestcontent)

public

intgetnumber()

public

void

setnumber

(int number)

}class

manager

public

void

getresult

(string managerlevel,request request)

else

}else

if(managerlevel.

equals

("總監"))

else

}else

if(managerlevel.

equals

("總經理"))

else

if(request.

getrequesttype()

.equals

("加薪"

)&&request.

getnumber()

<=

500)

else

if(request.

getrequesttype()

.equals

("加薪"

)&&request.

getnumber()

>

500)}}

}

manager類的getresult方法比較長,有太多分支,承擔的太多的職責,修改功能時需要修改類,違背了開閉原則;

解決:重構加新**

源**:v2.0(職責鏈模式)

}//申請:小菜請求加薪2000/小菜請假3天

class

request

public

void

setrequesttype

(string requesttype)

public string getrequestcontent()

public

void

setrequestcontent

(string requestcontent)

public

intgetnumber()

public

void

setnumber

(int number)

}abstract

class

manager

public manager getsuperior()

public

void

setsuperior

(manager superior)

abstract

public

void

(request request);}

class

commonmanager

extends

manager

@override

public

void

(request request)

else}}

}class

majordomo

extends

manager

@override

public

void

(request request)

else}}

}class

generalmanager

extends

manager

@override

public

void

(request request)

else

if(request.

getrequesttype()

.equals

("加薪"

)&&request.

getnumber()

<=

500)

else

}}職責鏈模式框架

源**:v1.0

package org.zangyu.iterator;

public

class

iterator3

;for

(int i=

0;i}abstract

class

handler

public

void

setname

(string name)

public handler getsuccessor()

public

void

setsuccessor

(handler successor)

public

abstract

void

handlerequest

(int request)

;//處理請求的抽象方法

}class

concretehandler1

extends

handler

else

if(successor!=null)}}

class

concretehandler2

extends

handler

else

if(successor!=null)}}

class

concretehandler3

extends

handler

else

if(successor!=null)

}}

職責鏈優缺點

優點:

客戶端無需知道哪乙個物件處理它的請求

請求處理物件維持乙個指向後繼者的引用,簡化物件的連線

可通過在執行時對該鏈進行動態增加or刪除改變處理乙個請求的職責

系統增加具體處理者無需修改原有**,只需要客戶端重新建立鏈即可,滿足開閉原則

缺點:a)沒有明確接收者,不能保證被處理

b)對請求鏈長的職責鏈,系統效能收到影響

職責鏈適用環境

例如:web應用中建立多個過濾器filter鏈來對請求進行過濾

工作流系統中實現辦公的分級審批

異常處理機制,不同的catch子句構成了一條處理異常物件的職責鏈

有多個物件可以處理請求

在不明確指定接收者的情況下向多個物件中的乙個提交乙個請求

客戶端動態指定一組物件處理請求,而且還可以改變鏈中的執行順序

設計模式 職責鏈模式

2008年08月17日 星期日 下午 04 28 using system using system.collections.generic using system.text public officer officer o public abstract void deal action a c...

設計模式 職責鏈模式

1 request.h ifndef request h define request h include include using namespace std class request 請求類定義 endif request h 2 manager.h ifndef manager h def...

設計模式 職責鏈模式

今天跟大家分享下設計模式中的職責鏈模式。不知道大家在學習職責鏈模式的時候是否感覺困難。我剛開始學的時候就被整暈了。呵呵,進入正題。職責鏈模式是物件行為型模式中比較有特點的設計模式了,的確有意思,它可以像資料結構中煉表一樣傳遞。其實生活中好多的行為方式都體現了職責鏈模式,我們初期學習者可以把職責鏈模式...