java23中设计模式之观察者模式

什么叫观察者模式?

当被观察者的数据更新时,将会通知观察该主题的所有观察者。就像---微信公众号就是被观察者---关注该公众号的就是观察者---》

当公众号更新文章时,关注的人就会获得该信息。这就是观察者模式的应用。

用图说明:

下面将用代码来解释上面的内容:

1.观察者

package com.observer.inter;
/**
 * 观察者
 * 1.提供更新方法
 * @author zy
 *
 */
public interface Observer {
   void update(String msg);
}

2.被观察者

package com.observer.concretesubject;
/**
 * 观察者模式中:被观察者是抽象类,当然接口也可以,但是正宫就是抽象类
 * 被观察者
 * 1.定义注册观察者方法
 * 2.定义移除观察者方法
 * 3.通知观察者方法
 * 4.发送通知(抽象)
 * @author zy
 *
 */

import java.util.ArrayList;
import java.util.List;

import com.observer.inter.Observer;

public abstract class ConcreteSubject {
	//定义一个集合用来作为观察者者的容器
	List<Observer> list=new ArrayList<>();
	
//	  1.定义注册观察者方法
	public void registerObserver(Observer ob){
		list.add(ob);
	}
//	  2.定义移除观察者方法
	public void removeObserver(Observer ob){
		list.remove(ob);
	}
//	  3.通知观察者方法
	protected void notifyObserver(String msg){
		for (Observer ob : list) {
			ob.update(msg);
		}
	}
//	  4.发送通知(抽象)
	public abstract  void setInfo(String msg);
}

3.观察者实现类

package com.observer.inter;
/**
 * 观察者实现类
 * @author zy
 *
 */
public class Users implements Observer{
    private String name;
	public Users(String name) {
		this.name=name;
	}
	@Override
	public void update(String msg) {
	 System.out.println(this.name+":接收到一条信息----》"+msg);
		
	}

}

 4.被观察者实现类

package com.observer.test;

import com.observer.concretesubject.ConcreteSubject;
/**
 * 仿微信公众号推送消息,被观察者
 * @author zy
 *
 */
public class WeChatServer extends ConcreteSubject{
//实现消息推送
	@Override
	public void setInfo(String msg) {
	System.out.println("推送信息中。。。。。。");
		notifyObserver(msg);
	}

}

5.测试类

package com.observer.test;

import com.observer.inter.Users;

public class Test {
	public static void main(String[] args) {
		//被观察者
		WeChatServer weChatServer=new WeChatServer();
	
		//定义观察者
		Users u1=new Users("张三");
		Users u2=new Users("胡月");
		Users u3=new Users("Bob");
		//注册观察者--关注公众号
		weChatServer.registerObserver(u1);
		weChatServer.registerObserver(u2);
		weChatServer.registerObserver(u3);
		//通知观察者
		weChatServer.setInfo("好好学习");
		//移除观察者--取消关注
		weChatServer.removeObserver(u3);
		weChatServer.setInfo("天天向上");
		
	}
}

运行结果: 

推送信息中。。。。。。
张三:接收到一条信息----》好好学习
胡月:接收到一条信息----》好好学习
Bob:接收到一条信息----》好好学习
推送信息中。。。。。。
张三:接收到一条信息----》天天向上
胡月:接收到一条信息----》天天向上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值