您的位置:首页 > 其它

观察者模式

2016-07-01 00:16 183 查看
——拷打、折磨,毫无人性的酷刑,制服了他的身体,却没有征服他的意志。无论何时,他都坚持着自己的信念,那个他写在绝笔中的信念,那个崇高、光辉、唯一的信念:涟即身无完骨,尸供蛆蚁,原所甘心。但愿国家强固,圣德刚明,海内长享太平之福。此痴愚念头,至死不改。有人曾质问我,遍读史书如你,所见皆为帝王将相之家谱,有何意义?千年之下,可有一人,不求家财万贯,不求出将入相,不求青史留名,唯以天下、以国家、以百姓为任,甘受屈辱,甘受折磨,视死如归?我答:曾有一人,不求钱财,不求富贵,不求青史留名,有慨然雄浑之气,万刃加身不改之志。杨涟,千年之下,终究不朽!

嗯,缅怀一下古人(来自明朝那些事儿,有气节的人总是让人敬佩的).看下今天的观察者模式吧,观察者模式在应用中好像也经常使用吧.额,比如应用APP商城下载东西的时候,APP详情页和APP应用页下载进度要同步,这需要观察者,群聊也可以用到观察者模式等.先来看张图片



观察者模式是一个被观察对象,多个观察者,观察者观察对象需要注册对象,注册后不观察的话需要反注册,即注销,我们在这举个例子说明下.现在小学生去上学报道的时候,要填写家长的手机号码,用来接收平时一些学校的通知,布置作业监督做作业之类的东西,这里面,学校或者班级就是一个被观察的对象,学生的家长就是观察者,报道登记号码,就是注册.等你毕业了或离开那个班级了,就是反注册,注销.嗯,大概就是这样,我们来看看具体实现例子,首选来看看观察者是什么样子

public interface Observer { //观察者

void updata(String msg);  //自由发挥想象
}


然后,我们来实例化两个观察者,即家长

public class XiaoMingObserver implements Observer{ //小明他妈妈

@Override
public void updata(String msg) {
// TODO Auto-generated method stub
System.out.println("小明妈妈手机收到短信  :   "+msg);
}

}

public class XiaoHuaObserver implements Observer{ //小华他妈妈

@Override
public void updata(String msg) {
// TODO Auto-generated method stub
System.out.println("小华妈妈手机收到短信  :   "+msg);
}

}


接着,我们来看看我们被观察的对象学校

public class Subject { //被观察对象,我们这简单点不需要复用.不把它写成抽象类或接口

//用来管理观察这个对象的观察者
ArrayList<Observer> observerList = new ArrayList<Observer>();

//注册观察者,观察需要注册
public void registerObserVer(Observer observer){

observerList.add(observer);
}

//注销观察者,观察者不观察了
public void unRegisterObserver(Observer observer){
observerList.remove(observer);
}

//通知观察者,对象发生了什么变化
public void notifyObserver(String str){

for (Observer ob : observerList) {

ob.updata(str);         //
}
}

}


好了,接着来测试一把

public class main {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

Subject subject = new Subject();

subject.registerObserVer(new XiaoMingObserver());    //小明入学注册
subject.registerObserVer(new XiaoHuaObserver());     //小华入学注册

subject.notifyObserver("星期天补课!!"); //学校发通知
}

}


输出

小明妈妈手机收到短信  :   星期天补课!!
小华妈妈手机收到短信  :   星期天补课!!


观察者模式差不多就这样了,不观察的时候就注销,也挺好理解吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: