observer模式的2个实现
来源:互联网 发布:淘宝 软件官网下载 编辑:程序博客网 时间:2024/06/15 10:18
//来个综合一点的吧,某生产线生产A,B 2个产品,当产品售出一件时分别通知A,B2个生产线的经理,并考虑以后还有可能会生产其他商品 //销售事件 interface ISoldNotify { void Notify(); } abstract class Product:ISoldNotify { private IObserver obs; public IObserver OBS { get { return obs; } set { obs = value; } } public void Notify() { if (obs != null) { obs.GetMessage(); } } } class ProductA:Product { } class ProductB: Product { } interface IProductFactory { Product CreateProduct(); } class ProductAFactory : IProductFactory { public Product CreateProduct() { return new ProductA(); } } class ProductBFactory : IProductFactory { public Product CreateProduct() { return new ProductB(); } } interface IObserver { void GetMessage(); } class ManagerA : IObserver { public void GetMessage() { Console.WriteLine("A商品卖出一个"); } } class ManagerB : IObserver { public void GetMessage() { Console.WriteLine("B商品卖出一个"); } } class Program { static void Main() { IProductFactory factory = new ProductAFactory(); Product product = factory.CreateProduct(); product.OBS = new ManagerA(); product.Notify(); Console.Read(); } }
第二个例子是用事件实现的observber,并且是线程安全的
class EmailManager { private event EventHandler<PublishEventArgs> NewEmailEvent; public void Attach(EventHandler<PublishEventArgs> observer) { NewEmailEvent += observer; } public void Detach(EventHandler<PublishEventArgs> observer) { NewEmailEvent -= observer; } public void SimulateNewMail(string from, string to, string message) { PublishEventArgs e = new PublishEventArgs(from, to, message); OnPublish(e); } public void OnPublish(PublishEventArgs e) { EventHandler<PublishEventArgs> temp = Interlocked.CompareExchange(ref NewEmailEvent, null, null); if (temp!= null) { NewEmailEvent(this, e); } } } interface IObserver { void HandlerEmail(object sender, PublishEventArgs e); } class Logger:IObserver { public void HandlerEmail(object sender, PublishEventArgs e) { Console.WriteLine(string.Format("{0}{1}{2}{3}",e.From,e.To,e.Msg,"已经写入日志")); } } class Printer:IObserver { public void HandlerEmail(object sender, PublishEventArgs e) { Console.WriteLine(string.Format("{0}{1}{2}{3}", e.From, e.To, e.Msg, "已经输出打印")); } } class PublishEventArgs : EventArgs { private string msg; private string from; private string to; public string From { get { return from; } } public string To { get { return this.to; } } public string Msg { get { return msg; } } public PublishEventArgs(string from,string to,string msg) { this.from = from; this.to = to; this.msg = msg; } } class Program { static void Main() { EmailManager em = new EmailManager(); IObserver logger = new Logger(); em.Attach(logger.HandlerEmail); IObserver printer = new Printer(); em.Attach(printer.HandlerEmail); //新来一封邮件 em.SimulateNewMail("wen", "Li", "Hello"); Console.Read(); } }
0 0
- observer模式的2个实现
- observer模式的简单实现
- observer设计模式的java实现
- 用C#实现的Observer模式
- 观察者模式 observer 模拟监听器的实现
- observer设计模式的java实现
- Observer观察者模式的一个实现
- Observer模式Linux下的C++实现
- 用C#实现的Observer模式
- 使用js实现observer模式
- 实现Observer模式(转载)
- java中实现observer模式
- C++实现Behavioral - Observer模式
- C++实现Behavioral - Observer模式
- Observer模式实现状态监控
- Java 实现观察者(Observer)模式
- Java 实现观察者(Observer)模式
- Java 实现观察者(Observer)模式
- 程序猿之--电子工程师必备网站
- 中创软件笔试题
- 苹果官网如何让iCloud更加安全保护自己隐私照片
- android 正则表达式验证(二)
- mysql与redis结合使用笔记(一)
- observer模式的2个实现
- hdoj 1073 Online Judge(输入格式控制)
- 法国街头夜景
- IOS学习脑图
- Tomcat 部署多个项目出现错误
- how to reference the LaunchImage
- Nginx
- 各种正则
- window忘记密码