首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

观察者模式的简略应用

2012-09-22 
观察者模式的简单应用一 观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依

观察者模式的简单应用

一 观察者模式

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

二 Java实例

package PostOfficeInstance;public interface ISubscribe {public void registered(Postoffice postoffice);public void unregistered(Postoffice postoffice);public void getNewspaper();}package PostOfficeInstance;import java.util.ArrayList;public class Postoffice {private ArrayList<ISubscribe>SubscribeList=new ArrayList<ISubscribe>();private boolean received;public void registeredSubscribe(ISubscribe subscribe) {SubscribeList.add(subscribe);}public void unregisteredSubscribe(ISubscribe subscribe) {if(subscribe!=null) SubscribeList.remove(subscribe);}public void setReceived(boolean received) {this.received=received;}public boolean getReceived() {return received;}public void sendNewspaper() {if(this.getReceived()==false) return;for(ISubscribe subscribe:SubscribeList) {subscribe.getNewspaper();}}}package PostOfficeInstance;public class Subscriber implements ISubscribe{private String mName;private String mNewspaperName;public Subscriber(String Name,String NewspaperName) {this.mName=Name;this.mNewspaperName=NewspaperName;}public void setName(String name) {this.mName=name;}public final String getName() {return mName;}public void setNewspaperName(String name) {this.mNewspaperName=name;}public final String getNewspaperName() {return this.mNewspaperName;}@Overridepublic void registered(Postoffice postoffice) {// TODO Auto-generated method stubpostoffice.registeredSubscribe(this);}@Overridepublic void unregistered(Postoffice postoffice) {// TODO Auto-generated method stubpostoffice.unregisteredSubscribe(this);}@Overridepublic void getNewspaper() {// TODO Auto-generated method stubSystem.out.println("I am "+this.mName);System.out.println("I received "+this.mNewspaperName);}}package PostOfficeInstance;public class Test {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubPostoffice postoffice=new Postoffice();Subscriber zhangsan=new Subscriber("zhangsan","Newspaper A");Subscriber lisi=new Subscriber("lisi","Newspaper B");Subscriber wangwu=new Subscriber("wangwu","Newspaper c");postoffice.registeredSubscribe(zhangsan);postoffice.registeredSubscribe(lisi);postoffice.registeredSubscribe(wangwu);postoffice.setReceived(true);postoffice.sendNewspaper();}}


 

 

三 测试结果

I am zhangsanI received Newspaper AI am lisiI received Newspaper BI am wangwuI received Newspaper c


 

 

热点排行