设计模式---观察者模式

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

现实中的例子有很多:比如,订阅的邮件,定时会发送更新的内容;《中国好声音》选秀节目中,一个选手是被观察者,四个导师是观察者,当选手开始唱歌时,四个导师会根据表现进行打分,等等。

2、多的不说,看一下2015中兴移动2015校招笔试题,实现简单,关键是根据自己的理解自定义观察者模式。

package Observer;

import java.util.Enumeration;
import java.util.Scanner;
import java.util.Vector;

/**
 * 中兴移动2015笔试题
 * 利用观察者模式实现一个数的三倍和平方
 * @author USER
 *
 */
//观察者接口,实现依赖被观察者的更新操作
interface Observer{
	public void update(int num);
}

//实现乘法操作的观察者
class mutiplyObserver implements Observer{

	@Override
	public void update(int num) {
		// TODO Auto-generated method stub
		System.out.println("这里观察乘法运算!");
		System.out.println(num*3);
	}
}

//实现平方操作的观察者
class squareObserver implements Observer{

	@Override
	public void update(int num) {
		// TODO Auto-generated method stub
		System.out.println("这里观察平方运算!");
		System.out.println(num*num);
	}
}

//定义观察者列表类,被观察者用来实现增加、删除、通知观察者操作
class AbstractSubject{
	//观察者列表
	private Vector<Observer> vector = new Vector<Observer>();
	//增加观察者
	public void add(Observer observer) {
		vector.add(observer);
	}
	//删除观察者
	public void del(Observer observer) {
		vector.remove(observer);
	}
	//通知观察者
	public void notify(int num) {
		Enumeration<Observer> e = vector.elements();
		while (e.hasMoreElements()) {
			e.nextElement().update(num);;
		}
	}
}

//被观察者实现操作
public class Subject extends AbstractSubject{
	
	//实现运算
	public void doCalculate(int m) {
		System.out.println("通知观察者更新运算");
		notify(m);
	}
	
	public static void main(String[] args) {
		
		Scanner in = new Scanner(System.in);
		int a = in.nextInt();
		
		//创建一个被观察者
		Subject subject = new Subject();
		
		mutiplyObserver mo = new mutiplyObserver();
		squareObserver so = new squareObserver();
		
		subject.add(mo);
		subject.add(so);
		
		subject.doCalculate(a);
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值