0
点赞
收藏
分享

微信扫一扫

java设计模式——观察者模式

1.观察者模式(Observer Pattern)

当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。例如你简书关注专题:javaEE学习笔记之后,该专题有了文章更新,就会接收到更新通知。

2.实现方式

3.步骤

  • Subject.java
package com.huan.eu.Observer;

import java.util.ArrayList;
import java.util.List;
/**
 * Created by 马欢欢 on 2017/9/25.
 */
    public class Subject {

        private List<Observer> observers
                = new ArrayList<Observer>();
        private int state;

        public int getState() {
            return state;
        }

        public void setState(int state) {
            this.state = state;
            notifyAllObservers();
        }

        public void attach(Observer observer){
            observers.add(observer);
        }

        public void notifyAllObservers(){
            for (Observer observer : observers) {
                observer.update();
            }
        }
}
  • Observer.java
package com.huan.eu.Observer;

public abstract class Observer {
    protected Subject subject;
    public abstract void update();
}
  • 1.BinaryObserver.java
package com.huan.eu.Observer;


public class BinaryObserver extends Observer{

    public BinaryObserver(Subject subject){
        this.subject = subject;
        this.subject.attach(this);
    }

    @Override
    public void update() {
        System.out.println( "二进制: "
                + Integer.toBinaryString( subject.getState() ) );
    }
}
  • 2.OctalObserver .java
package com.huan.eu.Observer;
public class OctalObserver extends Observer{

    public OctalObserver(Subject subject){
        this.subject = subject;
        this.subject.attach(this);
    }

    @Override
    public void update() {
        System.out.println( "八进制: "
                + Integer.toOctalString( subject.getState() ) );
    }
}
  • ObserverPatternDemo.java
package com.huan.eu.Observer;

import org.junit.Test;

public class ObserverPatternDemo {
    @Test
    public  void text() {
        Subject subject = new Subject();

        new OctalObserver(subject);
        new BinaryObserver(subject);

        System.out.println("十进制: 15");
        subject.setState(15);
        System.out.println("十进制: 10");
        subject.setState(10);
    }
}

4.优缺点

参考学习《菜鸟教程》

举报

相关推荐

0 条评论