Observer 模式在eHR中的应用
生活随笔
收集整理的這篇文章主要介紹了
Observer 模式在eHR中的应用
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
接觸模式應(yīng)該是在大三的時(shí)候,那時(shí)候感覺是模式讓我真正的認(rèn)識到了OO,現(xiàn)在畢業(yè)了,也工作有半年了,終于體會到了“商業(yè)特色的軟件開發(fā)”了,根本就沒有多余的時(shí)間去考慮運(yùn)用什么模式、怎樣使系統(tǒng)可擴(kuò)展性更強(qiáng)、如何重構(gòu)。哎!mo辦法啊(看過天下無賊的應(yīng)該能聽懂吧)!
??? 最近稍閑了點(diǎn),所以想重拾一下以前學(xué)的知識,這不就拿Observer模式開蒜了,廢話少說,來吧!
????
??? 一個(gè)軟件系統(tǒng)應(yīng)該存在著各式各樣的依賴,小系統(tǒng)尚且如此,大的商業(yè)系統(tǒng)當(dāng)然以來更加復(fù)雜。我舉一個(gè)在eHR(人力資源管理)系統(tǒng)中的依賴關(guān)系:
??? 1.組織架構(gòu)的修改要導(dǎo)致績效考核系統(tǒng)中簽核人的修改。
??? 現(xiàn)在將這段代碼進(jìn)行一下重構(gòu),在這個(gè)依賴關(guān)系里可以抽象出下面幾個(gè)對象:
??? 1.抽象主題:ISubject
??? 2.具體主題:OrgChgSubject
??? 3.抽象觀察者:IObserver
??? 4.觀察者:OrgChgObserver
??? 實(shí)現(xiàn)如下: /**////?<summary>
????///?抽象主題,所有的觀察者模式中的主題必須繼承該主題。
????///?</summary>
????public?interface?ISubject
????{
????????/**////?<summary>
????????///?添加觀察者
????????///?</summary>
????????void?AttachObserver(IObserver?observer);
????????/**////?<summary>
????????///?分離觀察者
????????///?</summary>
????????void?DetachObserver(IObserver?observer);
????????/**////?<summary>
????????///?通知觀察者
????????///?</summary>
????????void?NotifyObservers();
????}
/**////?<summary>
????///?抽象觀察者,所有的觀察者對象需實(shí)現(xiàn)該接口。
????///?</summary>
????public?interface?IObserver
????{
????????/**////?<summary>
????????///?抽象觀察者的更新方法,接收到通知后執(zhí)行該方法
????????///?</summary>
????????void?Update();
????}
/**////?<summary>
????///?組織架構(gòu)變化的觀察者
????///?</summary>
????public?class?OrgChgObserver:IObserver
????{
????????public?OrgChgObserver()
????????{
????????????//
????????????//?TODO:?在此處添加構(gòu)造函數(shù)邏輯
????????????//
????????}
????????IObserver?成員#region?IObserver?成員
????????public?void?Update()
????????{
????????????Console.WriteLine("*******績效系統(tǒng)的觀察者*******");
????????????Console.WriteLine("1.已經(jīng)接受到組織改動主題的通知");
????????????Console.WriteLine("2.更新績效管理系統(tǒng)的簽核人");
????????????Console.WriteLine("3.更新完畢");
????????????Console.WriteLine("*****************************");
????????}
????????#endregion
????}
/**////?<summary>
????///?組織架構(gòu)變化主題
????///?</summary>
????public?class?OrgChgSubject:ISubject
????{
????????private?ArrayList?observers;
????????public?OrgChgSubject()
????????{
????????????//
????????????//?TODO:?在此處添加構(gòu)造函數(shù)邏輯
????????????//
????????????observers=new?ArrayList();
????????}
????????ISubject?成員#region?ISubject?成員
????????/**////?<summary>
????????///?添加觀察者
????????///?</summary>
????????///?<param?name="observer"></param>
????????public?void?AttachObserver(IObserver?observer)
????????{
????????????observers.Add(observer);
????????}
????????/**////?<summary>
????????///?分離觀察者
????????///?</summary>
????????///?<param?name="observer"></param>
????????public?void?DetachObserver(IObserver?observer)
????????{
????????????observers.Remove(observer);
????????}
????????/**////?<summary>
????????///?通知注冊該主題的觀察者
????????///?</summary>
????????public?void?NotifyObservers()
????????{
????????????Console.WriteLine("*******組織架構(gòu)改動主題*******");
????????????Console.WriteLine("1.組織架構(gòu)已經(jīng)發(fā)生改變!");
????????????Console.WriteLine("*****************************");
????????????for(int?i=0;i<observers.Count;i++)
????????????{
????????????????IObserver?o=(IObserver)observers[i];
????????????????o.Update();
????????????}
????????}
????????#endregion
????}
/**////?<summary>
????///?主類
????///?</summary>
????public?class?MainClass
????{
????????[STAThread]
????????static?void?Main(string[]?args)
????????{
????????????OrgChgSubject?o_OrgChgSubject=new?OrgChgSubject();
????????????OrgChgObserver?o_OrgChgObserver=new?OrgChgObserver();
????????????o_OrgChgSubject.AttachObserver(o_OrgChgObserver);
????????????o_OrgChgSubject.NotifyObservers();
????????????Console.ReadLine();
????????}
????}
????運(yùn)行結(jié)果:
????
??? 可以看出實(shí)際上組織架構(gòu)的變動必然會導(dǎo)致很多的地方要求隨之相應(yīng)的變動,所以各個(gè)模塊都可以實(shí)現(xiàn)各自的Observer,實(shí)現(xiàn)自己的Update函數(shù)。
???很簡單不是嗎?不過還有一些邊緣問題要解決:
??? 1.觀察者在不同模塊怎么辦?即處于不同的DLL?
??? 2.如何將DEM事件機(jī)制運(yùn)用進(jìn)去?
????3.是否可以與MOP整合?
??? 。。。。。
??? 今天沒有時(shí)間了,先寫到這里吧。
??? 最近稍閑了點(diǎn),所以想重拾一下以前學(xué)的知識,這不就拿Observer模式開蒜了,廢話少說,來吧!
????
??? 一個(gè)軟件系統(tǒng)應(yīng)該存在著各式各樣的依賴,小系統(tǒng)尚且如此,大的商業(yè)系統(tǒng)當(dāng)然以來更加復(fù)雜。我舉一個(gè)在eHR(人力資源管理)系統(tǒng)中的依賴關(guān)系:
??? 1.組織架構(gòu)的修改要導(dǎo)致績效考核系統(tǒng)中簽核人的修改。
??? 現(xiàn)在將這段代碼進(jìn)行一下重構(gòu),在這個(gè)依賴關(guān)系里可以抽象出下面幾個(gè)對象:
??? 1.抽象主題:ISubject
??? 2.具體主題:OrgChgSubject
??? 3.抽象觀察者:IObserver
??? 4.觀察者:OrgChgObserver
??? 實(shí)現(xiàn)如下: /**////?<summary>
????///?抽象主題,所有的觀察者模式中的主題必須繼承該主題。
????///?</summary>
????public?interface?ISubject
????{
????????/**////?<summary>
????????///?添加觀察者
????????///?</summary>
????????void?AttachObserver(IObserver?observer);
????????/**////?<summary>
????????///?分離觀察者
????????///?</summary>
????????void?DetachObserver(IObserver?observer);
????????/**////?<summary>
????????///?通知觀察者
????????///?</summary>
????????void?NotifyObservers();
????}
/**////?<summary>
????///?抽象觀察者,所有的觀察者對象需實(shí)現(xiàn)該接口。
????///?</summary>
????public?interface?IObserver
????{
????????/**////?<summary>
????????///?抽象觀察者的更新方法,接收到通知后執(zhí)行該方法
????????///?</summary>
????????void?Update();
????}
/**////?<summary>
????///?組織架構(gòu)變化的觀察者
????///?</summary>
????public?class?OrgChgObserver:IObserver
????{
????????public?OrgChgObserver()
????????{
????????????//
????????????//?TODO:?在此處添加構(gòu)造函數(shù)邏輯
????????????//
????????}
????????IObserver?成員#region?IObserver?成員
????????public?void?Update()
????????{
????????????Console.WriteLine("*******績效系統(tǒng)的觀察者*******");
????????????Console.WriteLine("1.已經(jīng)接受到組織改動主題的通知");
????????????Console.WriteLine("2.更新績效管理系統(tǒng)的簽核人");
????????????Console.WriteLine("3.更新完畢");
????????????Console.WriteLine("*****************************");
????????}
????????#endregion
????}
/**////?<summary>
????///?組織架構(gòu)變化主題
????///?</summary>
????public?class?OrgChgSubject:ISubject
????{
????????private?ArrayList?observers;
????????public?OrgChgSubject()
????????{
????????????//
????????????//?TODO:?在此處添加構(gòu)造函數(shù)邏輯
????????????//
????????????observers=new?ArrayList();
????????}
????????ISubject?成員#region?ISubject?成員
????????/**////?<summary>
????????///?添加觀察者
????????///?</summary>
????????///?<param?name="observer"></param>
????????public?void?AttachObserver(IObserver?observer)
????????{
????????????observers.Add(observer);
????????}
????????/**////?<summary>
????????///?分離觀察者
????????///?</summary>
????????///?<param?name="observer"></param>
????????public?void?DetachObserver(IObserver?observer)
????????{
????????????observers.Remove(observer);
????????}
????????/**////?<summary>
????????///?通知注冊該主題的觀察者
????????///?</summary>
????????public?void?NotifyObservers()
????????{
????????????Console.WriteLine("*******組織架構(gòu)改動主題*******");
????????????Console.WriteLine("1.組織架構(gòu)已經(jīng)發(fā)生改變!");
????????????Console.WriteLine("*****************************");
????????????for(int?i=0;i<observers.Count;i++)
????????????{
????????????????IObserver?o=(IObserver)observers[i];
????????????????o.Update();
????????????}
????????}
????????#endregion
????}
/**////?<summary>
????///?主類
????///?</summary>
????public?class?MainClass
????{
????????[STAThread]
????????static?void?Main(string[]?args)
????????{
????????????OrgChgSubject?o_OrgChgSubject=new?OrgChgSubject();
????????????OrgChgObserver?o_OrgChgObserver=new?OrgChgObserver();
????????????o_OrgChgSubject.AttachObserver(o_OrgChgObserver);
????????????o_OrgChgSubject.NotifyObservers();
????????????Console.ReadLine();
????????}
????}
????運(yùn)行結(jié)果:
????
??? 可以看出實(shí)際上組織架構(gòu)的變動必然會導(dǎo)致很多的地方要求隨之相應(yīng)的變動,所以各個(gè)模塊都可以實(shí)現(xiàn)各自的Observer,實(shí)現(xiàn)自己的Update函數(shù)。
???很簡單不是嗎?不過還有一些邊緣問題要解決:
??? 1.觀察者在不同模塊怎么辦?即處于不同的DLL?
??? 2.如何將DEM事件機(jī)制運(yùn)用進(jìn)去?
????3.是否可以與MOP整合?
??? 。。。。。
??? 今天沒有時(shí)間了,先寫到這里吧。
轉(zhuǎn)載于:https://www.cnblogs.com/Masterpiece/archive/2004/12/21/79942.html
總結(jié)
以上是生活随笔為你收集整理的Observer 模式在eHR中的应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云中家园FTP搜索站点开通
- 下一篇: [团队公告]第二次技术交流主题征集