采用接口方式:
package te4;
//通知接口
public interface Subject {
public void Add(BaseObserverObj obj);
public void Del(BaseObserverObj obj);
public void Noti();
}
import java.util.ArrayList;
//通知类
public class SubjectObj implements Subject {
private ArrayList<BaseObserverObj> observers = new ArrayList<BaseObserverObj>();
@Override
//注册到通知类中
public void Add(BaseObserverObj obj) {
// TODO Auto-generated method stub
observers.add(obj);
}
//删除
@Override
public void Del(BaseObserverObj obj) {
// TODO Auto-generated method stub
observers.remove(obj);
}
@Override
//进行通知
public void Noti() {
// TODO Auto-generated method stub
for (BaseObserverObj obj : observers) {
obj.func();
}
}
}
//观察者类,只需要继承BaseObserverObj重写func方法
public class BaseObserverObj {
protected String name;
public BaseObserverObj(String name) {
// TODO Auto-generated constructor stub
this.name = name;
}
public void func() {
System.out.println(name+"哈哈");
}
}
public class ObserverObj1 extends BaseObserverObj {
public ObserverObj1(String name) {
// TODO Auto-generated constructor stub
super(name);
}
@Override
public void func() {
// TODO Auto-generated method stub
System.out.println(name+"呵呵");
}
}
//测试
public static void main(String[] args) {
// TODO Auto-generated method stub
BaseObserverObj base1 = new BaseObserverObj("Tom");
ObserverObj1 obse1 = new ObserverObj1("BOB");
SubjectObj subobj = new SubjectObj();
subobj.Add(base1);
subobj.Add(obse1);
subobj.Noti();
}
通过静态方法实现:
mport java.util.ArrayList;
import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;
//通知类
public class Boss {
static ArrayList<employee> emploees = new ArrayList<employee>();
public static void Add(employee em){
emploees.add(em);
}
public static void Del(employee em){
emploees.remove(em);
}
public static void Noti(){
for (employee emp :emploees) {
emp.func();
}
}
}
//观察者类,继承employee实现抽象函数func即可
public abstract class employee {
protected String name;
public employee(String nameString) {
// TODO Auto-generated constructor stub
name = nameString;
}
public abstract void func();
}
package te3;
public class employee1 extends employee{
public employee1(String nameString) {
// TODO Auto-generated constructor stub
super(nameString);
}
@Override
public void func() {
// TODO Auto-generated method stub
System.out.println(name+"干活了,别打游戏了");
}
}
public class employee2 extends employee {
public employee2(String name) {
// TODO Auto-generated constructor stub
super(name);
}
@Override
public void func() {
// TODO Auto-generated method stub
System.out.println(name+"工作了,别斗地主了");
}
}
//测试
Boss.Noti();
employee1 emp1 = new employee1("BOB");
employee2 emp2 = new employee2("John");
Boss.Add(emp1);
Boss.Add(emp2);
Boss.Noti();
Boss.Del(emp1);
Boss.Add(new employee1("Tom"));
employee emp3 = new employee("Merry") {
@Override
public void func() {
// TODO Auto-generated method stub
System.out.println(name +"上班了,别斗地主了");
}
};
Boss.Add(emp3);
Boss.Noti();
}