设计模式之观察者模式

观察者模式:所谓的观察者就是当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。观察者模式属于行为型模式。

注解:所有对象都可以是观察者,也可以是被观察者。

观察者模式的思维图如下:

 

被观察者接口

package 观察者模式;
/**
 * 
 * @author 博园学子
 * 被观察者接口
 */
public interface Observed {
    public void addObserver(Observer o);//添加观察者
    public void removeObserver(Observer o);//移除观察者
    public void notifyAllObserver();//通知所有观察者
}

微信公众号

package 观察者模式;

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

/**
 * 
 * @author 博园学子
 * 被观察者实现类(微信公众号)
 */
public class WeChatPublicNumber implements Observed{
    List<Observer> list=new ArrayList<>();//存放观察者(用户)的集合
    public boolean state=false;//被观察者的状态
    
    public boolean getState() {
        return state;
    }

    public void setState(boolean state) {
        this.state = state;
    }

    @Override
    public void addObserver(Observer o) {
        list.add(o);
    }

    @Override
    public void removeObserver(Observer o) {
        list.remove(o);
    }

    @Override
    public void notifyAllObserver() {
        if(this.getState()){
            for(Observer o:list){
                o.update();
            }
            this.state=false;
        }
    }
}

观察者接口

package 观察者模式;

public interface Observer {
    public void update();
}

用户1

package 观察者模式;
/**
 * 
 * @author 博园学子
 * 观察者类(用户)
 */
public class Customer1 implements Observer{

    @Override
    public void update() {
        System.out.println("Customer1已收到公众号更新");
    }
}

用户2

package 观察者模式;
/**
 * 
 * @author 博园学子
 * 观察者类(用户)
 */
public class Customer2 implements Observer{

    @Override
    public void update() {
        System.out.println("Customer2已收到公众号更新");
    }

}

测试类

package 观察者模式;
/**
 * 
 * @author 博园学子
 * 测试类
 */
public class Test {

    public static void main(String[] args) {
        //实例化被观察者
        WeChatPublicNumber observed=new WeChatPublicNumber();
        //实例化用户1
        Observer observer1=new Customer1();
        //实例化用户2
        Observer observer2=new Customer2();
        //为被观察者添加观察者
        observed.addObserver(observer1);
        observed.addObserver(observer2);
        //被观察者的状态改变
        observed.setState(true);
        observed.notifyAllObserver();
    }
}

运行结果:

posted @ 2018-12-28 16:55  博园学子  阅读(128)  评论(0)    收藏  举报