java实现23种设计模式之观察者模式

先建立一个接口和两个实现类

package com.ceshi14;

public interface Observer {
    public void update();
}
package com.ceshi14;

public class Observer1 implements Observer {

    @Override
    public void update() {
        System.out.println("观察者1已接收");
    }

}

再新建一个接口:

package com.ceshi14;

public interface Subject {
    
    /*增加观察者*/
    public void add(Observer observer);
    
    /*删除观察者*/
    public void del(Observer observer);
    
    /*通知所有的观察者*/
    public void notifyObservers();
    
    /*自身的操作*/
    public void operation();
}

其中通知所有的观察者的就是观察者模式。

具体实现:

package com.ceshi14;

import java.util.Enumeration;
import java.util.Vector;

public abstract class AbstractSubject implements Subject{
    
    private Vector<Observer> vector = new Vector<Observer>();
    @Override
    public void add(Observer observer) {
        vector.add(observer);
    }

    @Override
    public void del(Observer observer) {
        vector.remove(observer);
    }

    @Override
    public void notifyObservers() {
        Enumeration<Observer> enumo = vector.elements();
        while(enumo.hasMoreElements()){
            enumo.nextElement().update();
        }
    }
}
package com.ceshi14;

public class MySubject extends AbstractSubject{

    @Override
    public void operation() {
        System.out.println("更新自身!");
        notifyObservers();
    }

}

在这里,更新自身的同时通知其他观察者;

package com.ceshi14;

public class ObserverTest {
    
    public static void main(String[] args) {
        Subject sub = new MySubject();
        Observer1 observer1 = new Observer1();
        Observer2 observer2 = new Observer2();
        sub.add(observer1);
        sub.add(observer2);
        sub.operation();
        sub.del(observer2);
        sub.operation();
        
    }
    
}

结果:

只是将观察者关联起来,有点类似于socket的群聊,发出一句话然后其他人都能收到

这里其他人就算是观察者。这就是观察者模式

猜你喜欢

转载自www.cnblogs.com/zhengyuanyuan/p/10756185.html