在学习编程知识的时候,我们知道在编程算法中有很多著名的编程思想,今天我要介绍的就是一种比较著名的编程思想---观察者设计模式思想,我们知道有时候我们需要监听某个对象执行的命令或动作,以方便做出应对,被监听的对象叫做事件源,监听的对象需要实现某个接口即监听器接口,然后在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!
监听器:观察者设计模式
最新推荐文章于 2023-11-28 22:29:43 发布