定义: 两个观察者类 StaffOneStaffTwo 实现观察者接口,重写方法StaffOne 类public class StaffOne implements SalaryObserver{
@Override
public void GetSalaryInfoChanged(int monkey) {
// TODO Auto-generated method stub
System.out.println(StaffOne.class.getSimpleName()+"的薪水是"+monkey);
}
}
StaffTwo 类public class StaffTwo implements SalaryObserver{
@Override
public void GetSalaryInfoChanged(int monkey) {
// TODO Auto-generated method stub
System.out.println(StaffTwo.class.getSimpleName()+"的薪水是"+monkey);
}
}
定义测试类Testpublic class Test {
public static void main(String[] args) {
SalaryManger msalary=new SalaryManger();
msalary.addObserver(new StaffOne());
msalary.addObserver(new StaffTwo());
msalary.notifyObservers(10000);
}
}
打印结果:总结:我们来梳理一下自定义观察者设计模式的流程:
自定义一个观察者管理类, 在类中定义观察者接口, 以及声明几个必要的方法: 添加观察者,移除观察者, 通知所有观察者消息发生改变.
其中要注意的是,定义一个集合管理所有的观察者. 遵循的原理: 遍历集合,通知所有的观察者 一对多的关系. 为了保证单一实例子, 我们使用双重检查加锁的机制,保证观察者管理类在使用的时候只有一个实例.
其实,细心的人应该发现, 上述写法, 就类似于接口回调. 观察者实现了观察者接口的方法, 因此在消息发生改变后, 被通知, 再对应的实现方法中可以获取数据, 进行相应的操作.
-
1.png
(9.1 KB, 下载次数: 8)
作者: 等风来22
时间: 2017-11-3 11:43
111111111111111111111111
作者: baby14
时间: 2018-11-18 11:38
多谢分享
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |