你的位置:首页 > 软件开发 > Java > 观察者模式

观察者模式

发布时间:2017-11-09 19:00:08
观察者模式定义了对象之间的一对多依赖,这样依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新原则为了交互对象之间的松耦合设计而努力,松耦合设计更有弹性更能应对变化a.定义观察者模式 b.自己实现观察者模式/** * Created by xjw on 2017 ...

观察者模式

观察者模式定义了对象之间的一对多依赖,这样依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新

原则

  • 为了交互对象之间的松耦合设计而努力,松耦合设计更有弹性更能应对变化

a.定义观察者模式

观察者模式
 

b.自己实现观察者模式

/** * Created by xjw on 2017/11/9 16:53 * Email 1521975316@qq.com */public class Test { public interface Display {  void display(); } public interface Observer {  void update(int a, int b, int c); } public interface Subject {  void addObserver(Observer observer);  void removeObserver(Observer observer);  void notifiObserver(); } static class WeekDate implements Subject {  private List<Observer> observers;  private int a;  private int b;  private int c;  public WeekDate() {   this.observers = new ArrayList<>();  }  @Override  public void addObserver(Observer observer) {   observers.add(observer);  }  @Override  public void removeObserver(Observer observer) {   int i = observers.indexOf(observer);   if (i >= 0) {    observers.remove(i);   }  }  @Override  public void notifiObserver() {   for (int i = 0; i < observers.size(); i++) {    observers.get(i).update(a, b, c);   }  }  public void setData(int a, int b, int c) {   this.a = a;   this.b = b;   this.c = c;   notifiObserver();  } } static class AObserver implements Observer, Display {  private int a;  private int b;  private int c;  public AObserver(Subject subject) {   subject.addObserver(this);  }  @Override  public void update(int a, int b, int c) {   this.a = a;   this.b = b;   this.c = c;   display();  }  @Override  public void display() {   System.out.println("a:" + a + ";b:" + b + ";c:" + c);  } } public static void main(String[] args) {  WeekDate subject = new WeekDate();  AObserver observer = new AObserver(subject);  subject.setData(1, 2, 3);  subject.setData(4, 5, 6);  subject.removeObserver(observer);  subject.setData(7, 8, 9); }}

c.Java提供的观察者模式

  • 观察者接口(java.util.Observer)
  • 可被观察者类(java.util.Observable),相当于主题Subject
java学习群669823128


原标题:观察者模式

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录