减少代码的耦合度,一起来学习C#的观察者模式

作者: 襄城县纯量网络阅读:74 次发布时间:2024-04-16 11:01:04

摘要:在面向对象设计模式中,观察者模式是一种被广泛使用的设计模式。这种模式定义了对象之间的依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知并自动更新。 观察者模式的主要参与者有两个:主题(Subject)和观察者(Observer)。主题维护一个观察者列...

在面向对象设计模式中,观察者模式是一种被广泛使用的设计模式。这种模式定义了对象之间的依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知并自动更新。

减少代码的耦合度,一起来学习C#的观察者模式

观察者模式的主要参与者有两个:主题(Subject)和观察者(Observer)。主题维护一个观察者列表,并有一个添加观察者和删除观察者的方法。当主题状态变化时,它将通知所有观察者。观察者则是一个接口,它定义了一个更新方法,这个方法将被主题用来通知观察者。

C#语言提供了内置的观察者模式支持,通过`System.ComponentModel`命名空间下的`INotifyPropertyChanged`接口和`PropertyChanged`事件来实现。

下面是一个简单的示例来说明如何在C#中使用观察者模式。在这个例子中,我们将创建一个`Person`类和一个`AddressBook`类。当`Person`对象的地址发生变化时,所有的`AddressBook`对象都将得到通知。

```csharp

using System.Collections.ObjectModel;

using System.ComponentModel;

public class Person : INotifyPropertyChanged

{

    private string address;

    public event PropertyChangedEventHandler? PropertyChanged;

    public string Address

    {

        get => this.address;

        set

        {

            if (this.address != value)

            {

                this.address = value;

                this.NotifyPropertyChanged("Address");

            }

        }

    }

    private void NotifyPropertyChanged(string propertyName)

    {

        this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

    }

}

public class AddressBook

{

    private ObservableCollection people;

    public AddressBook()

    {

        this.people = new ObservableCollection();

        this.people.CollectionChanged += this.OnPeopleChanged;

    }

    private void OnPeopleChanged(object sender, NotifyCollectionChangedEventArgs e)

    {

        foreach (var person in this.people)

        {

            person.PropertyChanged += this.OnAddressChanged;

        }

    }

    private void OnAddressChanged(object sender, PropertyChangedEventArgs e)

    {

        if (e.PropertyName == "Address")

        {

            Console.WriteLine($"The address of a person has changed!");

        }

    }

}

```

在这个例子中,我们首先创建了一个`Person`类,这个类实现了`INotifyPropertyChanged`接口,并定义了一个`Address`属性。当这个属性的值改变时,我们将调用`NotifyPropertyChanged`方法来触发`PropertyChanged`事件。

然后我们创建了一个`AddressBook`类,这个类包含一个`ObservableCollection`集合。当这个集合的元素发生更改时,我们的`OnPeopleChanged`方法将被调用。在这个方法中,我们为每个`Person`对象注册了`PropertyChanged`事件。

我们的`OnAddressChanged`方法将在每个`Person`的地址发生更改时被调用。在这个方法中,我们打印出一条消息,表示有人的地址发生了更改。

以上就是C#中观察者模式的基本应用。在实际开发中,我们可以利用这种模式来减少代码的耦合度,使得各个模块更加独立。

  • 原标题:减少代码的耦合度,一起来学习C#的观察者模式

  • 本文由 襄城县纯量网络网小编,整理排版发布,转载请注明出处。部分文章图片来源于网络,如有侵权,请与纯量网络网联系删除。
  • 微信二维码

    CLWL6868

    长按复制微信号,添加好友

    微信联系

    在线咨询

    点击这里给我发消息QQ客服专员


    点击这里给我发消息电话客服专员


    在线咨询

    免费通话


    24h咨询☎️:132-5572-7217


    🔺🔺 棋牌游戏开发24H咨询电话 🔺🔺

    免费通话
    返回顶部