Net设计模式之观察者模式(Observer Pattern)(1)

简介:

一、观察者模式简介(Brief Introduction

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化的时,会通知所有观察者对象,使他们能够自动更新自己。

二、解决的问题(What To Solve

当一个对象的改变需要同时改变其他对象的时候,而且不知道有多少对象有待改变时,应该考虑使用观察者模式。
观察者模式所做的工作其实就是解除耦合,让耦合的双方都依赖于抽象,而不是依赖于具体,从而使的各自的变化都不会影响另一边的变化。

三、观察者模式分析(Analysis

1、观察者模式结构

Subject :它把所有对观察者对象的引用保存在一个聚集里面,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。
public void Notify()
{
    foreach(Observer o in observers)
    {
          o.Update();
    }
ConcreteSubject 具体的主题,将有关状态存入具体观察者对象,在具体主题的内部状态改变时,给所有登记国的观察者发出通知。
 
Observer :抽象观察者,为所有的具体观察者定义一个接口,在得到主题的通知时更新自己
ConcreteObserver :具体观察者,实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调

2、源代码

1 Subject 类, 主题或者抽象通知者
public  abstract class Subject
{
    private IList<Observer> observers = new List<Observer>();
 
    /// <summary>
    ///  添加观察者
    /// </summary>
    /// <param name="observer"> 观察者 </param>
    public void Attach(Observer observer)
    {
        observers.Add(observer);
    }
 
    /// <summary>
    ///  移除观察者
    /// </summary>
    /// <param name="observer"> 观察者 </param>
    public void Detach(Observer observer)
    {
        observers.Remove(observer);
    }
 
    /// <summary>
    ///  通知观察者
    /// </summary>
    public void Notify()
    {
        foreach (Observer o in observers)
        {
            o.Update();
        }
    }
}
 
2 ConcreteSubject 类, 具体主题或者具体通知者
public  class ConcreteSubject:Subject
{
    private string _subjectState;
 
    /// <summary>
    ///  具体被观察者状态
    /// </summary>
    public string SubjectState
    {
        get { return _subjectState; }
        set { _subjectState = value; }
    }
}
 
3 Observer 抽象观察者,为所有的具体观察者定义一个接口
public  abstract class Observer
{
    public abstract void Update();
}
 
4 ConcreteObserver 具体观察者
///   <summary>
///   具体观察者,实现抽象观察者角色所要求的更新接口
///   以便使本身的状态与主题的状态相协调
///   </summary>
public  class ConcreteObserver:Observer
{
    private string name;
    private string observerState;
    private ConcreteSubject subject;
 
    public ConcreteSubject Subject
    {
        get { return subject; }
        set { subject = value; }
    }
 
    public ConcreteObserver(ConcreteSubject subject,string name)
    {
        this.subject = subject;
        this.name = name;
    }
 
    public override void Update()
    {
        observerState = subject.SubjectState;
        Console.WriteLine(" 观察者{0}的新状态是{1}" ,name,observerState);
    }
}
 
5 、客户端代码
static  void  Main (string[] args)
{
    ConcreteSubject cs = new ConcreteSubject();
    cs.Attach(new ConcreteObserver(cs,"James"));
    cs.Attach(new ConcreteObserver(cs,"Jane"));
 
    cs.SubjectState="OK";
    cs.Notify();
    Console.Read();
}

3、程序运行结果











本文转自 灵动生活 51CTO博客,原文链接:http://blog.51cto.com/smartlife/258930,如需转载请自行联系原作者

目录
相关文章
|
9天前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
|
29天前
|
设计模式 传感器
【设计模式】观察者模式(定义 | 特点 | Demo入门讲解)
【设计模式】观察者模式(定义 | 特点 | Demo入门讲解)
36 0
|
4天前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
16 3
|
16天前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
32 9
|
15天前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
27 2
|
24天前
|
设计模式 监控 UED
设计模式之观察者模式
【10月更文挑战第12天】 观察者模式是一种行为型设计模式,定义了一对多的依赖关系,当一个对象状态改变时,所有依赖它的对象都会自动更新。主要由主题(被观察者)和观察者组成,实现对象间的松耦合,广泛应用于用户界面、事件驱动系统和数据监控等领域。
|
26天前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
本教程详细讲解Kotlin语法,适合深入学习。对于快速掌握Kotlin,推荐“简洁”系列教程。本文特别介绍了观察者模式,包括使用Java API和Kotlin委托属性(如Delegates.observable)实现的方法,旨在帮助开发者更高效地实现和优化观察者模式的应用。
31 3
|
2月前
|
设计模式 Java 关系型数据库
设计模式——观察者模式
观察者模式介绍、观察者模式优化天气预报案例、JDK 的Observable类和Observer类
设计模式——观察者模式
|
2月前
|
设计模式
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
28天前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
28 0