`
Xcupidtx
  • 浏览: 14987 次
社区版块
存档分类
最新评论

观察者模式 - 实例 (转载)

    博客分类:
  • JAVA
 
阅读更多

程序实例

  通过程序实例来说明观察者模式:

  首先定义抽象的观察者:

//抽象观察者角色
public interface Watcher
{
    public void update(String str);

}

  然后定义抽象的主题角色,即抽象的被观察者,在其中声明方法(添加、移除观察者,通知观察者):

复制代码
//抽象主题角色,watched:被观察
public interface Watched
{
    public void addWatcher(Watcher watcher);

    public void removeWatcher(Watcher watcher);

    public void notifyWatchers(String str);

}
复制代码

  然后定义具体的观察者:

复制代码
public class ConcreteWatcher implements Watcher
{

    @Override
    public void update(String str)
    {
        System.out.println(str);
    }

}
复制代码

  之后是具体的主题角色: 

复制代码
import java.util.ArrayList;
import java.util.List;

public class ConcreteWatched implements Watched
{
    // 存放观察者
    private List<Watcher> list = new ArrayList<Watcher>();

    @Override
    public void addWatcher(Watcher watcher)
    {
        list.add(watcher);
    }

    @Override
    public void removeWatcher(Watcher watcher)
    {
        list.remove(watcher);
    }

    @Override
    public void notifyWatchers(String str)
    {
        // 自动调用实际上是主题进行调用的
        for (Watcher watcher : list)
        {
            watcher.update(str);
        }
    }

}
复制代码

  编写测试类:

复制代码
public class Test
{
    public static void main(String[] args)
    {
        Watched girl = new ConcreteWatched();
        
        Watcher watcher1 = new ConcreteWatcher();
        Watcher watcher2 = new ConcreteWatcher();
        Watcher watcher3 = new ConcreteWatcher();
        
        girl.addWatcher(watcher1);
        girl.addWatcher(watcher2);
        girl.addWatcher(watcher3);
        
        girl.notifyWatchers("开心");
    }

}
复制代码
分享到:
评论

相关推荐

    设计模式-观察者

    5. **应用实例**:观察者模式广泛应用于各种场景,如事件驱动编程、GUI组件通信、消息队列等。例如,当用户在网页上点击按钮时,按钮作为被观察者,会触发一系列事件,这些事件的监听器(观察者)会接收到通知并执行...

    C# 观察者模式实例

    观察者模式是软件设计模式中的一种行为模式,它在面向对象编程中扮演着重要的角色,尤其是在C#这样的语言中。观察者模式的核心思想是定义一个一对多的依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象...

    C#设计模式—观察者模式应用实例

    3. Program.cs:这是程序的主入口点,可能会初始化观察者模式的实例并驱动其运行。 4. Player.cs:玩家类,可能是一个观察者,关注盟友控制中心的状态变化。 5. IObserver.cs:接口文件,定义了观察者的通用行为,...

    设计模式-实例代码

    首先,设计模式分为三大类:创建型模式(如单例、工厂方法、抽象工厂、建造者、原型)、结构型模式(如适配器、桥接、装饰器、组合、外观、享元、代理)和行为型模式(如策略、模板方法、观察者、迭代器、访问者、...

    观察者模式 - PHP版

    现在,可以通过创建`Subject`实例,添加`ConcreteObserver`实例作为观察者,然后在`Subject`的状态改变时调用`notify()`方法,触发观察者的更新。 **应用示例** 例如,在一个新闻系统中,当有新的新闻发布时,可以...

    IOS 观察者模式实例Demo

    在这个“IOS 观察者模式实例Demo”中,我们将深入探讨如何在iOS应用中实现观察者模式,并通过实际的代码示例来理解其工作原理。 首先,观察者模式的主要角色有两个:主题(Subject)和观察者(Observer)。主题是被...

    观察者模式1Demo

    观察者模式是软件设计模式中的一种行为模式,它在对象之间定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于事件处理、发布/订阅系统、以及...

    观察者模式简单例子

    观察者模式是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。在这个"观察者模式简单例子"中,我们将通过一个天气预报...

    观察者模式实现了股价涨跌提示

    在这个场景中,"股价涨跌提示"的功能就是一个典型的观察者模式应用实例。让我们深入探讨一下如何使用这种模式来实现这个功能。 在股市中,股民关注的股票价格时刻都在变动。当股票价格的涨跌幅达到特定阈值(例如5%...

    Java设计模式-第22章-观察者模式.ppt

    **观察者模式的应用实例** 在实际应用中,例如,一个新闻网站的用户订阅功能就是一个很好的观察者模式的例子。用户(观察者)订阅新闻源(观察目标),当新闻源发布新内容时,系统会自动通知所有订阅了该新闻源的...

    android Observer(观察者模式)_案例祥解.pdf

    在测试类中,我们实例化了被观察者和三个观察者,然后将观察者添加到被观察者中。当被观察者发生变化时,我们调用其notifyWatcher方法,通知所有观察者更新信息。 四、观察者模式的优点 观察者模式有以下几点优点...

    C# 观察者模式实例介绍

    而使用观察者模式后,我们可以将这些事件抽象为独立的观察者对象,例如看NBA直播的同事和看股票的同事,他们都是观察者,而老板则可以被视为被观察者,他的行为(如返回工作)会触发观察者的行为(如关闭直播或股票...

    体系结构学习代码!特别详细丰富

     【附加例4.1】利用中介者模式进行重构的实例  【附加例4.2】利用策略模式设计的相同数据的不同图表显示的实例  【附加例4.3】利用状态模式设计的天气状态软件  【附加例4.4】利用状态模式设计的中国个人...

    观察者模式源码

    观察者模式(Observer Pattern)是软件设计模式的一种,属于行为型模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在Java中,观察者模式主要通过...

    观察者模式代码

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动编程,例如...

    PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)借鉴.pdf

    PHP 设计模式实例之观察者模式、策略模式、简单工厂模式 PHP 设计模式实例之观察者模式、策略模式、简单工厂模式是指在 PHP 编程中应用设计模式来解决实际问题的实例。设计模式是一种通用的解决方案,可以重复使用...

    java观察者模式Demo

    观察者模式是软件设计模式中的一种行为模式,它在对象之间定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于事件处理、发布/订阅系统等场景。...

    设计模式 中的 单例模式和观察者模式

    在给定的标题和描述中,我们关注的是两种重要的设计模式:单例模式和观察者模式。 首先,让我们深入了解单例模式。单例模式是一种确保一个类只有一个实例,并提供全局访问点的设计模式。这种模式在资源管理、缓存、...

    软件设计模式与体系结构(讲解+代码)

     【例6.17】事件体系结构-观察者模式-大草原1  【例6.18】事件体系结构-观察者模式-大草原2  【例6.19】事件体系结构-观察者模式-温度显示  【例6.21】层次架构-软件测试  【例6.22】层次架构-银行- ...

    Qt实现全局观察者模式(多层窗体之间直接传递消息)

    在Qt框架中,实现全局观察者模式是一种有效的方式,它能解决多层窗体之间通信的问题,特别是当窗体层次复杂时,直接传递消息变得困难。观察者模式(Observer Pattern)是设计模式的一种,用于定义对象之间的一对多...

Global site tag (gtag.js) - Google Analytics