码迷,mamicode.com
首页 > 其他好文 > 详细

观察者模式

时间:2020-06-26 22:17:59      阅读:56      评论:0      收藏:0      [点我收藏+]

标签:extends   span   删除   abstract   alt   结构   image   pat   ring   

一. 模式的结构图

技术图片

 

 二. 模式的实现

package observer;
import java.util.*;
public class ObserverPattern
{
    public static void main(String[] args)
    {
        Subject subject=new ConcreteSubject();
        Observer obs1=new ConcreteObserver1();
        Observer obs2=new ConcreteObserver2();
        subject.add(obs1);
        subject.add(obs2);
        subject.notifyObserver();
    }
}
//抽象目标
abstract class Subject
{
    protected List<Observer> observers=new ArrayList<Observer>();   
    //增加观察者方法
    public void add(Observer observer)
    {
        observers.add(observer);
    }    
    //删除观察者方法
    public void remove(Observer observer)
    {
        observers.remove(observer);
    }   
    public abstract void notifyObserver(); //通知观察者方法
}
//具体目标
class ConcreteSubject extends Subject
{
    public void notifyObserver()
    {
        System.out.println("具体目标发生改变...");
        System.out.println("--------------");       
       
        for(Object obs:observers)
        {
            ((Observer)obs).response();
        }
       
    }          
}
//抽象观察者
interface Observer
{
    void response(); //反应
}
//具体观察者1
class ConcreteObserver1 implements Observer
{
    public void response()
    {
        System.out.println("具体观察者1作出反应!");
    }
}
//具体观察者1
class ConcreteObserver2 implements Observer
{
    public void response()
    {
        System.out.println("具体观察者2作出反应!");
    }
}

三. 适用场景

1. 一对多关系中,一个对象的状态发生改变会影响其他对象。
2. 有两个方面中,一个方依赖于另一方时,可将其独立封装成类,独立的改变和复用。

观察者模式

标签:extends   span   删除   abstract   alt   结构   image   pat   ring   

原文地址:https://www.cnblogs.com/shijianchuzhenzhi/p/13196426.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!