java设计模式之观察者模式

本文介绍了Java设计模式中的观察者模式,这是一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。文章通过定义Subject接口作为被观察者,Observer接口作为观察者来阐述该模式的核心概念。
摘要由CSDN通过智能技术生成

概述观察者模式相当于一对多的依赖,就是当一个对象改变时,会通知它所关联的类

             在这里,我们把被观察者用接口Subject定义,把观察者用接口Observer定义

              

/**
 * 被监视的需要实现这个接口,用于添加,删除,通知观察者
 * @author zhou
 *
 */
public interface Subject {
	public void addObser(Obsered obsered);
	public void deletObser(Obsered obsered);
	public void notifiObser(String context);

}

/**
 * 观察者实现这个接口,接收消息
 * @author zhou
 *
 */
public interface Observer {
	public void ubdate(String str);	
}

//被观察者
public class ConcreteSubject  implements Preson,Subject{
	public List<Observer> list = new ArrayList<Observer>();

	@Override
	public void addObser(Observer obsered) {
		// TODO Auto-generated method stub
		list.add(obsered);//添加观察者
	
	}

	@Override
	public void deletObser(Observer obsered) {
		// TODO Auto-generated method stub
		list.remove(obsered);//移除观察者
	}

	@Override
	public void notifiObser(String str) {
		// TODO Auto-generated method stub
		for(Observer obsered:list){
			obsered.ubdate(str);//通知观察者消息
		}
		
	}

	@Override
	public void eat() {
		// TODO Auto-generated method stub
		this.notifiObser("这货在吃饭");
		
	}

	@Override
	public void haveFun() {
		// TODO Auto-generated method stub
		this.notifiObser("这货在玩耍");
	}

}
/**
 * 观察者
 * @author zhou
 *
 */
public class ConcreteObserver implements Observer {

	@Override
	public void ubdate(String str) {
		// TODO Auto-generated method stub
		System.out.println("韩非子在吃饭");
		//在这里我已经得到消息
		happy();
	}


	public void happy() {
		// TODO Auto-generated method stub
		System.out.println("这货很快乐");
	}

}


//添加观察者

ConcreteSubject concreteSubject = new ConcreteSubject();
        Observer lisi = new ConcreteObserver();
        
        concreteSubject.addObser(liusi);
      
        concreteSubject.haveFun();

github地址为:  https://github.com/zhouwei5200/observer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值