设计模式20-观察者模式

1. 概念

    定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新

2. 案例

    

package org.demo.observe.demo01;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

abstract class Observer{ //观察者
    abstract void update(String status) ; //更新
}

abstract class Subject {  //被观察的对象
    protected String status ;
    public Subject(String status){
        this.status = status ; 
    }
    
    
    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }


    private List<Observer> observers = new ArrayList<Observer>() ;
    
    public void attach(Observer observer){
        observers.add(observer) ;
    }
    
    public void remove(Observer observer){
        observers.remove(observer) ;
    }
    
    public void MyNotify(){
        for(Iterator<Observer> it = observers.iterator() ; it.hasNext() ;){
            ((Observer)it.next() ).update(status);
        }
    }
}


class Obs01 extends Observer{

    @Override
    void update(String status) {
        System.out.println("观察者一发现了变化:"+status);
    }
}

class Obs02 extends Observer{

    @Override
    void update(String status) {
        System.out.println("观察者二发现了变化:"+status);
    }
}

class ConcreteSubject extends Subject{

    public ConcreteSubject(String status) {
        super(status);
    }
    
}
public class Demo01 {
    public static void main(String[] args) {
        ConcreteSubject cs = new ConcreteSubject("有新的新闻了 .") ;
        cs.attach(new Obs02()) ;
        cs.attach(new Obs01()) ;
        cs.MyNotify() ;
        cs.setStatus("又来新闻了") ;
        cs.MyNotify() ;
    }
}
原文地址:https://www.cnblogs.com/liaokailin/p/3804027.html