设计模式---Observer模式(由浅入深一)

1,定义:“对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖也他的对象都将得到通知并自动更新”。在java中,该模式是通过Observer接口和Observable类来实现的。

2,实例:为了更好的理解Observer模式,我们先从一个很实际的问题开始:该实例模拟的是一个大学的软件学院通知老师,学生,后勤等的一个过程。此过程我们先不去急着继承Obserbver和Observable这两个类,我们用最简单的代码来理解这个模式:

   实例描述:一天一个IT的大师来到XX软件学院(softschool)来讲座,此时软件学院发出通知分别给老师(teacher),学生(student),还有管理后勤的工作人员(cleaner),此时的softschool就相当于该模式中的subject,而 teacher,student,cleaner则属于observer。下面是他们之间的模式图:

根据模式图我们来写代码:

1,subject类:

package soft.Observe;

public interface Subject {
	public void register(Object object);
	public void remove(Object object);
	public void notifyObserver();
	public void setMeeting(String meeting);
    
    
}

 
2,SoftSchool类

 

package soft.Observe;
import java.util.List;
import java.util.ArrayList;
public class SoftSchool implements Subject{
	private List<Object> list = new ArrayList<Object>();
	private String meeting;
    public void register(Object object) {
    	list.add(object);
    }
    public void remove(Object object){
    	if(list.indexOf(object)>0){
    		int i = list.indexOf(object);
    		list.remove(i);
    	}
    }
    public void notifyObserver(){
    	for(int i= 0;i<list.size();i++)
    	{
    		Observer observer = (Observer)list.get(i);
    		observer.update(meeting);
    	}
    }
    public void setMeeting(String meeting){
    	this.meeting = meeting;
    	notifyObserver();
    }
    
    
}

 3,Observer接口

package soft.Observe;

public interface Observer {
    public void update(String info);
    
}

 4,Teacher类

package soft.Observe;

public class Teacher implements Observer{
	public void update(String info)
	{
		System.out.println("Hi sir,today have a meeting about"+info);
	}
	 
}

 5,Student类

package soft.Observe;


public class Student implements  Observer{
	public void update(String info)
	{
		System.out.println("Hi,Guys,today have a meeting about"+info);
	}
}

 6,Cleaner类

package soft.Observe;


public class Cleaner implements  Observer{
	public void update(String info)
	{
		System.out.println("Hi,Cleaners,today have a meeting about"+info);
	}
}

 7,TestObserver类(测试类)

package soft.Observe;

public class TestObserver {
	public static void main(String args[])
	{
		Subject subject = new SubjectCenter();
		Observer student = new Student();
		Observer teacher = new Teacher();
		Observer cleaner = new Cleaner();
		subject.register(student);
		subject.register(teacher);
		subject.register(cleaner);
		subject.setMeeting("Wrap-up meeting");
	}
    
}

8,运行结果: 

写道
Hi,Guys,today have a meeting aboutWrap-up meeting
Hi sir,today have a meeting aboutWrap-up meeting
Hi Cleaners,today have a meeting aboutWrap-up meeting

Process completed.

 到这一步,大家肯定对Observer模式的概念有了一定的理解,但是到目前为止我们还有用到jdk已经写好的接口Observer和Observable类,下面我们深入的来将上面的例子改过来:(未完待续 请看第二部)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值