設計モード(16)-オブザーバモード


定義#テイギ#
観察者モードは、被観察者の動作トリガを観察者に通知することを目的とするパブリッシュ購読モードとも呼ばれる.例えばredisのパブリケーション購読機能、メッセージキューの生産者と消費者.

シミュレーションメッセージキューの生産消費、生産者はObservable類を継承し、消費者はObserverインタフェースを実現する.Observable類は主に新たな観察者の追加、観察者の削除、観察者への通知などの方法を実現した.Observerは主にメッセージを受け取った後のupdate方法を宣言した.
1.生産者インタフェース
public interface IProducer {
    public void produce();  //    
}

2.生産者
public class Producer extends Observable implements IProducer{
    //Observable        ,     ,        .
    @Override
    public void produce() {
        System.out.println("    ");
        super.setChanged();
        super.notifyObservers("     0"+new Random().nextInt(10));
    }
}

3.消費者
public class ConsumerA implements Observer{
    @Override
    public void update(Observable o, Object arg) {
        System.out.println("   A     ,   "+arg.toString());
    }
}
public class ConsumerB implements Observer{
    @Override
    public void update(Observable o, Object arg) {
        System.out.println("   B     ,   "+arg.toString());
    }
}

4.運転
public class Client {
    public static void main(String[] args) {
        //     ,   
        Producer producer = new Producer();
        ConsumerA consumerA = new ConsumerA();
        ConsumerB comsumerB = new ConsumerB();

        //          
        producer.addObserver(consumerA);
        producer.addObserver(comsumerB);

        //              
        for(int i=0;i<5;i++){
            producer.produce();
        }
    }
}

結果:
    
   B     ,        03
   A     ,        03
    
   B     ,        01
   A     ,        01
    
   B     ,        08
   A     ,        08
    
   B     ,        05
   A     ,        05
    
   B     ,        01
   A     ,        01