C#设计模式之---观察者模式

这篇具有很好参考价值的文章主要介绍了C#设计模式之---观察者模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

观察者模式(Observer Pattern)

观察者模式(Observer Pattern)是一种对象行为模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。在观察者模式中,主体是通知的发布者,它发出通知时并不需要知道谁是它的观察者,可以有任意数目的观察者订阅并接收通知。观察者模式不仅被广泛应用于软件界面元素之间的交互,在业务对象之间的交互、权限管理等方面也有广泛的应用。观察者模式的主要的作用就是对对象解耦,将观察者和被观察者完全隔离。

1)面向对象方式实现

using System;
using System.Collections.Generic;
namespace ConsoleApplication
{
    //一般每个接口或类都写在单独的.cs文件中
    //本示例为了执行查看方便才写在一起  
    /// 
    public interface IObserver
    {
        void Action();
    }
    public class Baby : IObserver
    {
        public void Action()
        {
            this.Cry();
        }
        public void Cry()
        {
            Console.WriteLine("{0} Cry", this.GetType().Name);
        }
    }
    public class Brother : IObserver
    {
        public void Action()
        {
            this.Turn();
        }
        public void Turn()
        {
            Console.WriteLine("{0} Turn", this.GetType().Name);
        }
    }
    public class Chicken : IObserver
    {
        public void Action()
        {
            this.Woo();
        }
        public void Woo()
        {
            Console.WriteLine("{0} Woo", this.GetType().Name);
        }
    }
    public class Dog : IObserver
    {
        public void Action()
        {
            this.Wang();
        }
        public void Wang()
        {
            Console.WriteLine("{0} Wang", this.GetType().Name);
        }
    }
    public class Neighbor : IObserver
    {
        public void Action()
        {
            this.Awake();
        }
        public void Awake()
        {
            Console.WriteLine("{0} Awake", this.GetType().Name);
        }
    }
    public class Animal
    {
        //一般的实现
        //public void Sound()
        //{
        //    Console.WriteLine("{0} Sound.....", this.GetType().Name);
        //    new Chicken().Woo();
        //    new Baby().Cry();
        //    new Brother().Turn();
        //    new Dog().Wang();
        //    new Neighbor().Awake();
        //}
        private List<IObserver> _ObserverList = new List<IObserver>();
        public void Add(IObserver observer)
        {
            this._ObserverList.Add(observer);
        }
        public void Remove(IObserver observer)
        {
            this._ObserverList.Remove(observer);
        }
        public void SoundObserver()
        {
            Console.WriteLine("{0} SoundObserver.....", this.GetType().Name);
            foreach (var observer in this._ObserverList)
            {
                observer.Action();
            }
        }
    }
    // 
    /// 观察者模式
    /// 对象和行为的分离
    /// 
    class Program
    {
        static void Main(string[] args)
        {
            Animal animal = new Animal();
            animal.Add(new Baby());
            animal.Add(new Brother());
            animal.Add(new Chicken());
            animal.Add(new Dog());
            animal.Add(new Neighbor());
            animal.SoundObserver();
        }
    }
}

 2)事件委托方式实现

using System;
using System.Collections.Generic;
namespace ConsoleApplianimalion
{
    //一般每个接口或类都写在单独的.cs文件中
    //本示例为了执行查看方便才写在一起  
    public interface IObserver
    {
        void Action();
    }
    public class Baby : IObserver
    {
        public void Action()
        {
            this.Cry();
        }
        public void Cry()
        {
            Console.WriteLine("{0} Cry", this.GetType().Name);
        }
    }
    public class Brother : IObserver
    {
        public void Action()
        {
            this.Turn();
        }
        public void Turn()
        {
            Console.WriteLine("{0} Turn", this.GetType().Name);
        }
    }
    public class Chicken : IObserver
    {
        public void Action()
        {
            this.Woo();
        }
        public void Woo()
        {
            Console.WriteLine("{0} Woo", this.GetType().Name);
        }
    }
    public class Dog : IObserver
    {
        public void Action()
        {
            this.Wang();
        }
        public void Wang()
        {
            Console.WriteLine("{0} Wang", this.GetType().Name);
        }
    }
    public class Neighbor : IObserver
    {
        public void Action()
        {
            this.Awake();
        }
        public void Awake()
        {
            Console.WriteLine("{0} Awake", this.GetType().Name);
        }
    }
    public class Animal
    {
        //一般的实现
        //public void Sound()
        //{
        //    Console.WriteLine("{0} Sound.....", this.GetType().Name);
        //    new Chicken().Woo();
        //    new Baby().Cry();
        //    new Brother().Turn();
        //    new Dog().Wang();
        //    new Neighbor().Awake();
        //}
        public event Action SoundHandler;
        public void SoundEvent()
        {
            Console.WriteLine("{0} SoundEvent.....", this.GetType().Name);
            if (this.SoundHandler != null)
            {
                //foreach (Action action in this.SoundHandler.GetInvoanimalionList())
                //{
                //    action.Invoke();
                //}
                this.SoundHandler.Invoke();
            }
        }
    }
    // 
    /// 观察者模式
    /// 对象和行为的分离
    /// 
    class Program
    {
        static void Main(string[] args)
        {
            Animal animal = new Animal();
            animal.SoundHandler += new Action(() => new Dog().Wang());
            animal.SoundHandler += new Chicken().Woo;
            animal.SoundHandler += new Baby().Cry;
            animal.SoundHandler += new Brother().Turn;
            animal.SoundHandler += new Neighbor().Awake;
            animal.SoundEvent();
        }
    }
}

 文章来源地址https://www.toymoban.com/news/detail-562361.html

到了这里,关于C#设计模式之---观察者模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式——观察者模式

    观察者模式可以分为观察者和被观察者,观察者通过注册到一个被观察者中,也可视为订阅,当被观察者的数据发生改变时,会通知到观察者,观察者可以据此做出反应。 可以类比订阅报纸,报社就是被观察者,订阅者就是观察者,订阅者通过订阅报纸与报社建立联系,而报

    2024年02月15日
    浏览(53)
  • 设计模式-观察者模式

    观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者

    2024年02月15日
    浏览(58)
  • 设计模式---观察者模式

    1,概念         属于行为模式的一种,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一对象主题对象,这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。 在观察者模式中有如下角色: Subject:抽象主题(抽象被观察者),

    2024年02月15日
    浏览(65)
  • 设计模式:观察者模式

    定义 观察者模式(Observer Pattern)是一种行为设计模式,允许一个对象(称为“主题”或“可观察对象”)维护一组依赖于它的对象(称为“观察者”),当主题的状态发生变化时,会自动通知所有观察者对象。 应用场景 观察者模式适用于以下场景: 联动反应 :当一个对象

    2024年04月08日
    浏览(59)
  • 重温设计模式 --- 观察者模式

    观察者模式 是一种行为型设计模式,它允许对象之间建立一种一对多的关系,使得当一个对象状态改变时,所有依赖它的对象都能够自动得到通知并更新自己的状态。该模式可以帮助我们实现松耦合的系统,以便更好地应对变化和扩展。 在观察者模式中,有两个角色: 观察

    2024年02月13日
    浏览(59)
  • 设计模式(11)观察者模式

    一、概述: 1、定义:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 2、结构图: 实现  调用

    2024年02月11日
    浏览(53)
  • 设计模式——14. 观察者模式

    观察者模式(Observer Pattern)是一种行为型设计模式,用于定义对象之间的一对多依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都能够自动收到通知并更新自己的状态,以保持与被观察对象的同步。观察者模式也被称为发布-订阅模式。 观察者模式包含以

    2024年02月07日
    浏览(45)
  • 设计模式之观察者模式

    可以帮你的对象知悉现况,不会错过该对象感兴趣的事。对象甚至在运行时可决定是否要继续被通知。 从报纸和杂志的订阅说起: 报社的业务就是出版报纸 向某家报社订阅报纸,只要他们有新报纸出版,就会给你送来。只要你是他们的订户,你就会一直收到新报纸。 当你不

    2024年01月24日
    浏览(54)
  • 观察者设计模式

    行为型模式(Behavioral Patterns):这类模式主要关注对象之间的通信。它们 分别是: 职责链模式(Chain of Responsibility) 命令模式(Command) 解释器模式(Interpreter) 迭代器模式(Iterator) 中介者模式(Mediator) 备忘录模式(Memento) 观察者模式(Observer) 状态模式(State) 策略

    2024年01月24日
    浏览(51)
  • 设计模式-观察者

    观察者模式是一种广泛应用于软件开发中的行为设计模式,尤其是在面向对象编程(OOP)中。该模式定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新 在观察者模式中,存在两个主要角色: 主题(Subject) 或 被

    2024年01月22日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包