设计模式——观察者模式

package Observer_pattern;

/*
在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。
就比方说下面的一个简单例子,通过WeChat来告诉User做什么事情。
*/

import javax.net.ssl.SSLContext;
import java.util.ArrayList;
import java.util.Vector;

// 定义一个抽象被观察者接口,也称作主题
interface Subject {
    public void registerObserver(Observer o);
    public void removeObserver(Observer o);
    public void notifyObserver(String name);
}

// 观察者接口
interface Observer {
    public void update(String info);
}

class Wechat implements Subject {
    ArrayList arrayList;
    Wechat() {
        arrayList = new ArrayList();
    }

    @Override
    public void registerObserver(Observer o) {
        arrayList.add(o);
    }

    @Override
    public void removeObserver(Observer o) {
        if(!arrayList.isEmpty()) {
            arrayList.remove(o);
        }
    }

    @Override
    public void notifyObserver(String something) {
        for (Object it : arrayList) {
            ((Observer) it).update(something);
        }
    }

    public void display() {
        for (Object it: arrayList) {
            ((User)it).display();
        }
    }
}



class User implements Observer {
    String doing;
    String name;
    User(String name) {
        doing = "NoThing";
        this.name = name;
    }
    @Override
    public void update(String somthing) {
        doing = somthing;
    }
    public void display() {
        System.out.println(name + " is doing " + doing);
    }
}

public class Main {
    public static void main(String args[]) {
        User user1 = new User("Tom");
        User user2 = new User("Sam");
        User user3 = new User("Jack");
        Wechat wechat = new Wechat();
        wechat.registerObserver(user1);
        wechat.registerObserver(user2);
        wechat.registerObserver(user3);
        wechat.display();
        System.out.println("==================================");
        wechat.notifyObserver("eating");
        wechat.display();
        System.out.println("===================================");
        wechat.removeObserver(user2);
        wechat.display();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值