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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZhangY1217/article/details/83057650

什么叫观察者模式?

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

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

用图说明:

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

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:接收到一条信息----》好好学习
推送信息中。。。。。。
张三:接收到一条信息----》天天向上
胡月:接收到一条信息----》天天向上

猜你喜欢

转载自blog.csdn.net/ZhangY1217/article/details/83057650