Java设计模式—观察者模式(IListenner、ISpeaker)

目录

目的

应用实例

代码


  • 目的

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

  • 应用实例

  1. 接水的时候,接水的人观察水位,当水位到一定程度时候便停止接水;

  2. 老师一布置任务,学生听到都得做。

  • 代码

package com.gary.designpattern.observe;

/**

 * 观察者接口IListenner

 * 定义一个update()方法,当被观察者调用notifyListenner()方法时,观察者的update()方法会被回调

 * @author gary

 *

 */

public interface IListenner {

    public void update(String info);

}
package com.gary.designpattern.observe;

/**

 * 被观察者接口ISpeaker

 * 声明添加删除通知观察者方法

 * @author gary

 *

 */

public interface ISpeaker {

    

    public void addListenner(IListenner listenner);

    

    public void removeListenner(IListennerlistenner);

    

    public void notifyListenner();

}
package com.gary.designpattern.observe;

public class Student implements IListenner {

    private String name;

    private String info;

    

    public Student(String name) {

         this.name = name;

    }

    

    @Override

    public void update(String info) {

         this.info = info ;

         read();

    }

    

    public void read() {

         System.out.println("学生:" + name + " 接收到老师的消息 :" + info);

    }

}
package com.gary.designpattern.observe;

import java.util.ArrayList;

import java.util.List;

public class Teacher implements ISpeaker {

    

    private List<IListenner> listennerList;

    private String info;

    

    public Teacher() {

         listennerList = new ArrayList<>();

    }

    @Override

    public void addListenner(IListenner listenner) {

         listennerList.add(listenner);

    }

    @Override

    public void removeListenner(IListennerlistenner) {

         listennerList.remove(listenner);

    }

    

    @Override

    public void notifyListenner() {

         for(int i = 0; i < listennerList.size();i++) {

             IListenner lis = listennerList.get(i);

             lis.update(info);

         }            

    }

    

    public void setInfo(String info) {

         System.out.println("老师发送消息 : " +info);

         this.info = info;

         notifyListenner();

    }

    

}

测试:
 

package com.gary.designpattern.observe;

public class Test {

    public static void main(String[] args) {

         Teacher teacher = new Teacher();

         teacher.addListenner(new Student("张三"));

         teacher.addListenner(new Student("李四"));

         teacher.addListenner(new Student("王五"));

         teacher.setInfo("大家好");

    }

}

结果:

老师发送消息 : 大家好

学生:张三 接收到老师的消息 :大家好

学生:李四 接收到老师的消息 :大家好

学生:王五 接收到老师的消息 :大家好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值