usingSystem;usingSystem.Collections.Generic; namespaceDemo{#region抽象層,定義了觀察者模式///<summary>///(抽象)新聞///</summary>publicinterfaceINews{voidSubScribe(ISubscribers);voidUnSubScribe(ISubscribers);voidPublish(stringnewsTitle);//在具體實現的過程中建立發布與訂閱的聯系} ///<summary>///(抽象)訂閱者///</summary>publicinterfaceISubscriber{voidRead(stringnewsTitle);}#endregion #region實現層,是對抽象層的具體實現///<summary>///(具體)新聞///</summary>publicclassITNews:INews{PRivateList<ISubscriber>readers=newList<ISubscriber>(); publicvoidSubScribe(ISubscribers){readers.Add(s);} publicvoidUnSubScribe(ISubscribers){if(readers.Count>0){readers.Remove(s);}} publicvoidPublish(stringnewsTitle){foreach(ISubscriberiinreaders){i.Read(newsTitle);//<<<<<發布的時候訂閱>>>>>}}} ///<summary>///(具體)訂閱者///</summary>publicclassSubscriber:ISubscriber{privatestringsubscriber=string.Empty;publicSubscriber(stringsubscriber){this.subscriber=subscriber;} publicvoidRead(stringnewsTitle){Console.WriteLine(string.Format("{0}閱讀了IT新聞/"{1}/"",subscriber,newsTitle));}}#endregion publicclassPro{staticvoidMain(string[]args){ITNewsnews=newITNews();Subscriberzs=newSubscriber("張三"),ls=newSubscriber("李四"),ww=newSubscriber("王五"); news.SubScribe(zs);news.SubScribe(ls);news.SubScribe(ww);news.UnSubScribe(ls);//張三取消訂閱 news.Publish("2014年移動電商攻堅戰:阿里巴巴如何破局?");news.Publish("余額寶還能重回高收益率嗎?"); Console.ReadKey();}}}
新聞熱點
疑難解答