设计模式--observer(316)

来源:互联网 发布:effective java 第3版 编辑:程序博客网 时间:2024/05/18 02:56

模式原型:

实例:

public interface Observer {    public abstract void update(NumberGenerator numberGenerator);}

public abstract class NumberGenerator {    private ArrayList observers = new ArrayList();    public void addObserver(Observer observer) {        observers.add(observer);    }    public void deleteObserver(Observer observer) {        observers.remove(observer);    }    public void notifyObservers() {        Iterator iterator = observers.iterator();        while (iterator.hasNext()) {            Observer ob = (Observer) iterator.next();            ob.update(this);        }    }    public abstract int getNumber();//获取数值    public abstract void execute(); //生成数值}

public class RandomNumberGenerator extends NumberGenerator{    private Random random = new Random();    private int number;    @Override    public int getNumber() {        return number;    }    @Override    public void execute() {        for(int i = 0;i < 10; i++){            number = random.nextInt(60);            notifyObservers();        }    }}

public class GraphObserver implements Observer {    @Override    public void update(NumberGenerator numberGenerator) {        System.out.println("GraphObserver");        for (int i = 0; i < numberGenerator.getNumber(); i++) {            System.out.print("*");        }        System.out.println();        try {            Thread.sleep(100);        } catch (Exception e) {        }    }}

public class DigitObserver implements Observer {    @Override    public void update(NumberGenerator numberGenerator) {        System.out.println("DigitObserver:" + numberGenerator.getNumber());        try {            Thread.sleep(100);        } catch (Exception e) {        }    }}


public class Main {    public static void main(String[] args) {        NumberGenerator generator = new RandomNumberGenerator();        generator.addObserver(new DigitObserver());        generator.addObserver(new GraphObserver());        generator.execute();    }}

结果:


DigitObserver:22
GraphObserver
**********************
DigitObserver:47
GraphObserver
***********************************************
DigitObserver:12
GraphObserver
************
DigitObserver:44
GraphObserver
********************************************
DigitObserver:48
GraphObserver
************************************************
DigitObserver:3
GraphObserver
***
DigitObserver:45
GraphObserver
*********************************************
DigitObserver:0

原创粉丝点击