• 观察者模式


    观察者模式

    标签(空格分隔): 设计模式


    观察者模式: 当对象之间存在一对多的关系的时候, 则使用观察者模式. 比如当一个对象呗修改的时候, 则会自动通知他的依赖对象, 观察者模式属于行为模式

    优点

    观察者模式实现了动态联动
    观察者模式实现了广播通信

    缺点

    如一个主题被大量观察者观察, 则通知所有的观察者的代价较高.
    如果某些观察者的相应方法被阻塞, 整个通知过程也会被阻塞, 其他观察者不能及时被通知.

    public interface Observer {
        void update(String info);
    }
    
    public class StudentObserver implements Observer {
        private String name;
    
        public StudentObserver(String name) {
            this.name = name;
        }
    
        @Override
        public void update(String info) {
            System.out.println(name+"收到消息"+info);
        }
    }
    
    import java.util.ArrayList;
    import java.util.List;
    
    public interface Subject{
        void registerObserver(Observer observer);
        void removeObserver(Observer observer);
        void notifyObservers(String msg);
    }
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class TeacherSubject implements Subject{
        //用来存放和记录观察者
        private List<Observer> observers=new ArrayList<Observer>();
        @Override
        public void registerObserver(Observer obj) {  //增加观察者
            observers.add(obj);
        }
        @Override
        public void removeObserver(Observer obj) {  //删除观察者
            int i = observers.indexOf(obj);
            if( i >= 0 )
                observers.remove(obj);
        }
        @Override
        public void notifyObservers(String msg) {   //通知消息
            for(Observer observer : observers) {
                observer.update(msg);
            }
        }
    }
    
    public class Test {
        public static void main(String[] args){
            TeacherSubject teacher = new TeacherSubject();
            StudentObserver studentObserver1 = new StudentObserver("鸣人");
            StudentObserver studentObserver2 = new StudentObserver("佐助");
            teacher.registerObserver(studentObserver1);
            teacher.registerObserver(studentObserver2);
            teacher.notifyObservers("发作业啦");
        }
    }
    
  • 相关阅读:
    第三次作业
    最后一次作业
    第14.15周作业
    第七周作业
    第六周作业
    第四周作业
    第三周作业
    第二周作业
    第一周作业
    第0次作业
  • 原文地址:https://www.cnblogs.com/A-FM/p/11644263.html
Copyright © 2020-2023  润新知