您的位置:首页 > 其它

举例简述观察者模式(Observer)

2015-10-29 17:04 295 查看
常用设计模式———观察者模式

定义:一对多的依赖关系,让多个观察者同时监听某一个主题帮助。当该对象发生变化时,会通知所有观察者,使他们的状态自动发生变化。【如学生监听老师的动作,当老师发作业时,学生的动作根据作业来产生变化,并知道是哪位老师在布置作业。】

2、优点:减少对象之间的耦合,有利于系统的复用,并保证分工合作的高效

3、应用场合:如网站监听在线人数,并监听是什么用户在做什么动作,接着网站的某些动作随之变化

举例说明——

package listener;
public class Demo1 {
/**观察者模式
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Person p=new Person();
p.register(new MyPersonListener(){    //注入监听器
//重写该接口的方法,学生开始跑,并能知道是哪位老师发指令
public void dorun(Event e){
Person p=e.getsource();
System.out.println(p+"跑步咯");
}
public void doeat(Event e){
Person p=e.getsource();
System.out.println(p+"吃饭咯");
}
});
p.eat();
}
}
class Person{    //观察者,类比学生
private MyPersonListener listener=null;//监听动作
public void run(){
if(listener!=null){    //当老师发指令,就触发dorun方法,加入event就知道是哪位老师发指令
listener.dorun(new Event(this));
}
}
public void eat(){
if(listener!=null){
listener.doeat(new Event(this));
System.out.println("事件2");
}
}
public void register(MyPersonListener listener){
this.listener=listener;
}
}
//监听的对象——事件源(类比老师,这里有多个老师)
class Event{
private Person source;
public Event(Person source){
this.source=source;
}
public Person getsource(){
return this.source;
}
}
//监听接口
interface MyPersonListener{
public void dorun(Event e);
public void doeat(Event e);
}


5、输出结果——(显示是哪个监听者对象在做什么事)



6、求职过程中,不管是笔试还是技术面,都经常会涉及常用的设计模式,在使用什么框架时加入什么设计模式,都是考验求职者能力的一步,普遍性很广。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: