美文网首页
观察者模式(Observer)

观察者模式(Observer)

作者: tingshuo123 | 来源:发表于2018-09-27 18:54 被阅读7次

一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。就可以使用观察者模式,当少的一方状态发生改变时会自动通知所有依赖它的对象并自动更新。

Java已经提供了观察者模式的默认支持,Observable类 和 Observer接口。

目标对象需要继承Observable类,目标对象代码如下:

public class Food extends Observable {
    
    // 菜名
    private String name;
    // 价格
    private float price;
    
    public Food(String name, float price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
        
        // 价格发生改变
        this.setChanged();
        // 商贩一旦改变菜价,便会通知所有顾客(回调Observer的update方法进行更新)
        this.notifyObservers(price);
    }
}

观察者,需要实现Observer接口,并且重写update方法,update方法写根据实际情况写业务逻辑。

/**
 * 顾客
 *
 */
public class Customer implements Observer{
    
    private String name;
    
    public Customer(String name) {
        this.name = name;
    }
    
    public String getName() {
        return this.name;
    }
    
    // 目标对象状态一旦发生改变,便会执行此方法
    @Override
    public void update(Observable o, Object arg) {
        if (o instanceof Food && arg instanceof Float) {
            Food food = (Food) o;
            float price = (Float) arg;
            System.out.printf("您好: %s, %s的价格已经发生改变,现在的价格为:%.2f 元/斤\n", this.name, food.getName(), price);
        }
    }
}

测试,观察者想要接到通知,还需要在目标对象调用 addObserver(Object obj) 方法注册

public class TestMain {
    
    @Test
    public void test() {
        // 商品
        Food food = new Food("土豆", 11.5f);
        // 顾客
        Customer lisi = new Customer("李四");
        Customer wangwu = new Customer("王五");
        
        // 添加需要通知顾客
        food.addObserver(lisi);
        food.addObserver(wangwu);
        
        // 更新价格
        food.setPrice(100.0f);
    }
}

相关文章

  • Android 开发--观察者模式

    观察者 模式 有两个 角色,观察者observer ,被观察者observable。 Observer 是个接口,...

  • 设计模式之观察者模式

    观察者模式 Observer Intro 观察者模式又叫做 发布订阅(Publish/Subscribe)模式,观...

  • 行为型模式——观察者模式

    观察者模式定义 观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe),定义对象...

  • c++观察者模式

    1.观察者模式简介    观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe)...

  • 面試小記

    1:设计模式 观察者模式observer observerble,subscribe (订阅) (1)观察者对象 ...

  • 观察者模式

    观察者模式 观察者模式的定义 观察者模式(Observer Pattern)也叫做发布订阅模式(Publish/s...

  • 设计模式之观察者模式

    观察者模式定义 观察者模式(Observer Pattern)也叫做发布订阅模式(Publish/Subscrib...

  • JS观察者模式简介及实例

    一、概念观察者(observer)模式:又称订阅/发布(subscriber/publisher)模式,被观察者(...

  • 行为型设计模式总结

    观察者模式 Observer模式作用是当一个对象发生变化时,能够自动通知它的观察者刷新状态。Observer模式提...

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

    观察者模式的定义 观察者模式(Observer Pattern)也叫发布订阅模式(Publish/subscrib...

网友评论

      本文标题:观察者模式(Observer)

      本文链接:https://www.haomeiwen.com/subject/trhyoftx.html