标签:观察 system use images 提高 image oid rem for
下面举个栗子:
比如 有群小学生喜欢看七龙珠漫画,但是书店现在没有,等书店进了新书以后,然后书店去通知小学生前来购买漫画,
这样小学生就是观察者 书店就是被观察者。
定义观察者的抽象:
/** * 抽象观察者 * Created by Administrator on 2017/3/13. * * 定义一个接口,可以让被观察者更新时主动通知自己 */ public interface Observer { void update(String message); }
定义观察者的实现-小学生:
/** * 具体观察者-小学生 * Created by Administrator on 2017/3/13. * 具体观察者实现抽象观察者接口,可以在收到更新通知后更改自己状态 */ public class ObserverStudent implements Observer { private String userName; public ObserverStudent(String userName) { this.userName = userName; } @Override public void update(String message) { System.out.println(userName + "接到通知:" + message+"-放学就来买!"); } }
-----------------------------------------------------------------------------------------------------
定义被观察者的抽象:
/** * * 抽象的被观察者 * * 1、观察者对象保存在一个集合 * 2、可以增加和删除观察者对象 * 3、主动通知观察者 * Created by Administrator on 2017/3/13. */ public interface Subject { void addObserver(Observer observer); void delObserver(Observer observer); void notifyObserver(String message); }
定义具体的被观察者-书店:
/** * * 具体被的观察者,实现被观察中者的接口 * Created by Administrator on 2017/3/13. */ public class SubjectBookstore implements Subject{ //存放观察者的集合 private List<Observer> userList = new ArrayList<Observer>(); @Override public void addObserver(Observer observer) { userList.add(observer); } @Override public void delObserver(Observer observer) { userList.remove(observer); } @Override public void notifyObserver(String message) { for(Observer observer :userList){ observer.update(message); } } }
》》》》》》测试下:
public class Main { public static void main(String [] args){ Subject subject = new SubjectBookstore(); Observer ob1 = new ObserverStudent("小凯"); Observer ob2 = new ObserverStudent("小兰"); Observer ob3 = new ObserverStudent("小明"); subject.addObserver(ob1); subject.addObserver(ob2); subject.addObserver(ob3); subject.notifyObserver("七龙珠漫画到了!"); } }
测试结果如下:
以上就简单的实现了观察者模式,不过有优点就有缺点,以后再说!
标签:观察 system use images 提高 image oid rem for
原文地址:http://www.cnblogs.com/lewskay/p/6542107.html