本文共 3148 字,大约阅读时间需要 10 分钟。
采用接口方式:
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 ArrayListobservers = new ArrayList ();@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 stubsuper(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 ArrayListemploees = new ArrayList ();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 stubsuper(nameString);}@Overridepublic 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);}@Overridepublic void func() { // TODO Auto-generated method stubSystem.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();}
转载地址:http://mlnvb.baihongyu.com/