模式-------观察者模式

                                                            观察者模式

          第一次接触观察者模式,上网查了许多资料之后,以下是一些粗浅的理解。如有不对地方,请指正。

          观察者模式:在对象之间定义一对多的依赖,当一个对象改变状态时,依赖它的对象会受到通知并自动更新。

         在网上看到的一句话来形容特别好,观察者模式其实就是发布订阅模式,发布者发布消息,订阅者接收消息,订阅了就能收到消息,没订阅就收不到消息。用微信小程序来做例子最合适不过了,被观察者就是公众号,观察者就是用户,用户只有关注公众号之后才能收到推送消息。

         我这里按照网上别人的帖子,自己做了一个类似的demo。

主要包含4个类:

         被观察者接口

         观察者接口

         实际被观察者(公众号)

         实际观察者(用户)

  • 第一,完成被观察者接口

         这个接口需要实现一些基本的功能,比如注册,删除,通知消息。

public interface Oberverable {

	public void regist(Oberver o);

	public void delete(Oberver o);

	public void notifyObserver();
}
  • 第二,完成观察者接口

         这个接口需要实现响应动作的功能。

public interface Oberver {

	public void receive(String message);
}
  • 第三,实际被观察者(公众号)

         这个类需要继承被观察者接口,接管一些基本的功能。当然,如果有其他功能可以在这里添加。最重要的一点:这里需要添加一个List,存放观察者(用户)。等被观察者做出动作(发布消息),通过遍历观察者来进行通知。

public class WeChatServer implements Oberverable {

	List<Oberver> list;

	public WeChatServer() {
		list = new ArrayList<Oberver>();
	}

	@Override
	public void regist(Oberver o) {
		list.add(o);
	}

	@Override
	public void delete(Oberver o) {
		list.remove(o);
	}

	@Override
	public void notifyObserver() {
		System.out.println("开始发送通知消息");
		send();
	}

	private void send() {
		for (int i = 0; i < list.size(); i++) {
			list.get(i).receive("PHP是世界上最好的语言");
		}
	}
  • 第四,实现观察者(用户)

         这个类需要继承观察者接口,实现响应动作(接收消息)。

public class User implements Oberver {

	private String name;

	private String message;

	public User(String name) {
		this.name = name;
	}

	@Override
	public void receive(String message) {
		this.message = message;
		show();
	}

	private void show() {
		System.out.println(name + message);
	}

}
  • 第五、编写测试类
public class App {
	public static void main(String[] args) {
		User user1 = new User("张三");
		User user2 = new User("李四");
		User user3 = new User("王五");

		WeChatServer server = new WeChatServer();
		server.regist(user1);
		server.regist(user2);
		server.regist(user3);
		server.notifyObserver();

		server.delete(user1);
		server.notifyObserver();

	}
}

   首先注册了三个用户张三、李四、王五。公众号发布了一条消息"PHP是世界上最好用的语言!",三个用户都收到了消息。

         用户张三看到消息后颇为震惊,果断取消订阅,这时公众号又推送了一条消息,此时用户张三已经收不到消息,其他用户还是正常能收到推送消息。

来自:https://www.cnblogs.com/luohanguo/p/7825656.html

 

 

    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值