监听器:观察者设计模式

        在学习编程知识的时候,我们知道在编程算法中有很多著名的编程思想,今天我要介绍的就是一种比较著名的编程思想---观察者设计模式思想,我们知道有时候我们需要监听某个对象执行的命令或动作,以方便做出应对,被监听的对象叫做事件源,监听的对象需要实现某个接口即监听器接口,然后在main函数中给当前对象注册一个监听器,完成对监听事件的监听。(个人理解,有什么错误,希望大佬多指教)

代码如下:

1.定义PersonListener接口

package com.nyist.cn.Listener;



public interface PersonListener{
public void dorun(PersonEvent e);
public void doeat(PersonEvent e);

import com.nyist.cn.Model.Person;

public class PersonEvent{
private Person person;

protected Person getPerson() {
return person;
}

protected void setPerson(Person person) {
this.person = person;
}

public PersonEvent(Person person) {
super();
this.person = person;
}

public PersonEvent() {
super();
}
}

}

2.定义监听器的事件

package com.nyist.cn.Listener;


import com.nyist.cn.Model.Person;


public class PersonEvent{
private Person person;


protected Person getPerson() {
return person;
}


protected void setPerson(Person person) {
this.person = person;
}


public PersonEvent(Person person) {
super();
this.person = person;
}


public PersonEvent() {
super();
}

}

3.实体类Person

package com.nyist.cn.Model;



import com.nyist.cn.Listener.PersonEvent;
import com.nyist.cn.Listener.PersonListener;

//使用观察者设计模式  设置监听器
public class Person {

private PersonListener listener;
public void eat(){
if(listener!=null){
this.listener.doeat(new PersonEvent(this));
}
System.out.println("eat!");
}

public void run(){
if(listener!=null){
this.listener.dorun(new PersonEvent(this));
}
System.out.println("run!");
}

//需要给顶一个监听器对象 
public void registerListener(PersonListener listener){
this.listener = listener;
}

}

4.测试类

package com.nyist.cn.Listener;


import com.nyist.cn.Model.Person;


public class ListenerDemo2 {
public static void main(String[] args){
Person p  = new Person();
p.registerListener(new MyPersonListener());
p.eat();
p.run();
}
}


class MyPersonListener implements PersonListener{


@Override
public void dorun(PersonEvent e) {
Person p = e.getPerson();
System.out.println(p+"吃过饭,不能跑步!");
}


@Override
public void doeat(PersonEvent e) {
Person p = e.getPerson();
System.out.println(p+"吃太多,容易造成肥胖!");
}

}

5.运行结果

com.nyist.cn.Model.Person@15db9742吃太多,容易造成肥胖!
eat!
com.nyist.cn.Model.Person@15db9742吃过饭,不能跑步!
run!

猜你喜欢

转载自blog.csdn.net/lvhaoguang0/article/details/81063100