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