Java 观察者模式

采用接口方式

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();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值