观察者模式

2016-05-15  本文已影响24人  keith666

Intent

Structure

Observer by keith
  • 实现代码:
  • public class Observer {
        public static void main(String[] args){
            Feeder feeder=new Feeder();
            Observable ob1=new Cat();
            Observable ob2=new Dog();
            Observable ob3=new Sheep();
    
            //register the observable
            feeder.register(ob1);
            feeder.register(ob2);
            feeder.register(ob3);
    
            //change the msg
            feeder.changeMsg("time to eat");
        }
    }
    //observable interface
    interface Observable {
        // method to be called by subject
        void update(String msg);
    }
    //Cat
    class Cat implements Observable {
    
        @Override
        public void update(String msg) {
            System.out.println(getClass().getSimpleName() + " received: " + msg);
        }
    }
    //Dog
    class Dog implements Observable {
    
        @Override
        public void update(String msg) {
            System.out.println(getClass().getSimpleName() + " received: " + msg);
        }
    }
    //Sheep
    class Sheep implements Observable {
    
        @Override
        public void update(String msg) {
            System.out.println(getClass().getSimpleName() + " received: " + msg);
        }
    }
    //subject interface
    interface Subject {
        void register(Observable obs);
    
        void unregister(Observable obs);
    
        void notifyDataChanged(String msg);
    }
    class Feeder implements Subject {
    
        private List<Observable> observables;
    
        private String message;
    
        public Feeder() {
            this.observables = new ArrayList<>();
        }
    
        public void changeMsg(String msg) {
            message = msg;
            notifyDataChanged(msg);
        }
    
        @Override
        public void register(Observable obs) {
            observables.add(obs);
        }
    
        @Override
        public void unregister(Observable obs) {
            observables.remove(obs);
        }
    
        @Override
        public void notifyDataChanged(String msg) {
            for (Observable obs : observables) {
                obs.update(msg);
            }
        }
    }
    
    1. 运行结果:
    Cat received: time to eat
    Dog received: time to eat
    Sheep received: time to eat
    

    Refenrence

    1. Design Patterns
    2. 设计模式
    上一篇 下一篇

    猜你喜欢

    热点阅读