職責鏈模式

2021-10-07 04:00:04 字數 2707 閱讀 2906

又迭代器模式。 

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

案例:加薪申請、上報與審批

源**:

package iterator;

public class iterator

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

class request

public void setrequesttype(string requesttype)

public string getrequestcontent()

public void setrequestcontent(string requestcontent)

public int getnumber()

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方法比較長,有太多分支,承擔的太多的職責,修改功能時需要修改類,違背了開閉原則;

職責鏈模式框架:

}}例題重新架構:

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

class request

public void setrequesttype(string requesttype)

public string getrequestcontent()

public void setrequestcontent(string requestcontent)

public int getnumber()

public void setnumber(int number)

}abstract class manager

public manager getsuperior()

public void setsuperior(manager superior) }

class commonmanager extends manager

@override

// todo auto-generated method stub

if(request.getrequesttype().equals("請假")&&request.getnumber()<=2)

else

} }}

class majordomo extends manager

@override

// todo auto-generated method stub

if(request.getrequesttype().equals("請假")&&request.getnumber()<=5)

else

} }

}class generalmanager extends manager

@override

// todo auto-generated method stub

if(request.getrequesttype().equals("請假")&&request.getnumber()<=2)

else if(request.getrequesttype().equals("加薪")&&request.getnumber()<=500)else

}}職責鏈模式優缺點:職責鏈模式適用環境例如:web應用中建立多個過濾器filter鏈來對請求進行過濾

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

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

職責鏈模式

1.職責鏈 namespace dutychainpattern 用來處理請求 public abstract void transmitrequest int request 班主任 職責鏈上的乙個節點,在裡面進行判斷,看能否處理請求,不能則將請求轉移 public class classadvi...

職責鏈模式

軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...

職責鏈模式

劇情簡要 學習此模式,讓筆者聯想到自然界的生物鏈。打個比方 大魚吃小魚,小魚吃蝦公尺。河裡的小蝦公尺問大魚,你要不要吃我啊?大魚說 你太小了,吃了 沒吃,return 懶得吃!然後蝦公尺又問小魚 小螃蟹 小河馬同樣的問題。其實如果小蝦公尺這麼想自我了結的話,根本不用這麼費勁。這就開始了我們職責鏈模式...