C#觀察者模式(Observer Pattern)實(shí)例教程
本文以實(shí)例形式簡(jiǎn)單講述了C#觀察者模式,分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:
現(xiàn)在假設(shè)有一個(gè)軟件公司,每當(dāng)有新產(chǎn)品推出,就把信息通知到一些客戶。
把通知這個(gè)動(dòng)作抽象成一個(gè)接口。代碼如下所示:
public interface IService { void Notif(); }
客戶如果想獲得通知,就需要實(shí)現(xiàn)以上的接口。這里的客戶被看作是觀察者。
public class CustomerA : IService { public void Notif() { Console.WriteLine("客戶A收到通知了~~"); } } public class CustomerB : IService { public void Notif() { Console.WriteLine("客戶B收到通知了~~"); } }
作為軟件公司來(lái)講,維護(hù)著一個(gè)客戶的集合,并提供注冊(cè)、取消注冊(cè)的方法,往這個(gè)集合添加或刪除客戶。每當(dāng)有通知的時(shí)候,就遍歷客戶集合,讓IService執(zhí)行通知。軟件公司可以看作是一個(gè)被觀察對(duì)象,或者說(shuō)是發(fā)起動(dòng)作的源頭。
public class MyCompany { private IList<IService> subscribers = new List<IService>(); public void Subscribe(IService subscriber) { subscribers.Add(subscriber); } public void CancelSubscribe(IService subscriber) { subscribers.Remove(subscriber); } public void SendMsg() { foreach (IService service in subscribers) { service.Notif(); } } }
客戶端創(chuàng)建軟件公司實(shí)例、創(chuàng)建觀察者實(shí)例、注冊(cè)或取消觀察者等。
class Program { static void Main(string[] args) { MyCompany company = new MyCompany(); IService customerA = new CustomerA(); IService customerB = new CustomerB(); company.Subscribe(customerA); company.Subscribe(customerB); company.SendMsg(); Console.ReadKey(); } }
總結(jié):
① 把一個(gè)通知的動(dòng)作抽象成接口
② 觀察者如果想接收到通知,就實(shí)現(xiàn)通知接口
③ 被觀察對(duì)象做3件事情:維護(hù)觀察者的集合,注冊(cè)/取消觀察者,發(fā)起動(dòng)作遍歷觀察者集合讓通知接口來(lái)做事
希望本文所述對(duì)大家C#程序設(shè)計(jì)的學(xué)習(xí)有所幫助。
相關(guān)文章
C#通過(guò)委托調(diào)用Button單擊事件的方法
本文給大家分享的是通過(guò)委托取消Button事件switch-case的方法,十分的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。2015-05-05C#之Windows自帶打印功能的實(shí)現(xiàn)
這篇文章主要介紹了C#之Windows自帶打印功能的實(shí)現(xiàn)方式,具有很好的價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06C#操作數(shù)據(jù)庫(kù)總結(jié)(vs2005+sql2005)
C#操作數(shù)據(jù)庫(kù)總結(jié),每次做項(xiàng)目都會(huì)用到數(shù)據(jù)庫(kù),對(duì)數(shù)據(jù)庫(kù)的操作都是糊里糊涂從書(shū)里找代碼用。通過(guò)昨天晚上與今天早上的努力,把數(shù)據(jù)庫(kù)的操作整理了一下,下面把整理結(jié)果做個(gè)小結(jié)2012-09-09