观察者模式是非常常用的设计模式,观察者模式属于什么型设计模式

  观察者模式是非常常用的设计模式,观察者模式属于什么型设计模式

  00-1010使用场景优缺点注意事项一、实现方式1、观察者抽象类2、第一观察者3、第二观察者4、第三观察者5、定义题目2、测试总结

  00-1010 1.观察者和被观察者是抽象耦合的。

  2.建立一套触发机制。

  00-1010 1.如果一个被观察对象有很多直接和间接的观察者,那么要通知所有的观察者就要花很多时间。

  2.如果观察者和观察目标之间存在循环依赖,观察目标会触发它们之间的循环调用,这可能会导致系统崩溃。

  3.观察者模式没有相应的机制让观察者知道被观察对象发生了怎样的变化,只知道被观察对象发生了变化。

  00-1010一个抽象模型有两个方面,其中一个依赖于另一个。将这些方面封装在独立的对象中,使它们能够被独立地更改和重用。

  一个对象的变化会导致一个或多个其他对象的变化,而不知道会有多少个对象发生变化,这样会降低对象之间的耦合度。

  一个对象必须通知其他对象,而不知道它们是谁。

  有必要在系统中创建一个触发链。对象A的行为会影响对象B,对象B的行为会影响对象C ……您可以使用观察者模式来创建连锁触发机制。

  

目录

在1.JAVA已经有一个观察者模式的支持类。

 

  2.避免循环引用。

  3.如果是顺序执行,一个观察者的失误会导致系统卡壳,一般是异步的。

  

优点

 

  

缺点

包com . asur plus.common . observe;/* * *观察者*/公共抽象类观察者{保护主体subject;/* * * Publish事件*/public abstract void update();}

 

  

使用场景

包com . asur plus.common . observe;导入lombok . extern . SLF 4j . SLF 4j;@Slf4jpublic class Observer1扩展Observer { public Observer 1(Subject Subject){ this . Subject=Subject;this . subject . attach(this);} @ override public void update(){ log . info( Observer 1收到通知:{} ,this . subject . getstate());}}

 

  

注意事项

包com . asur plus.common . observe;导入lombok . extern . SLF 4j . SLF 4j;@Slf4jpublic class Observer2扩展Observer { public Observer 2(Subject Subject){ this . Subject=Subject;this . subject . attach(this);} @ override public void update(){ log . info( Observer 2收到通知:{} ,this . subject . getstate());}}

 

  

一、实现方式

包com . asur plus.common . observe;导入lombok . extern . SLF 4j . SLF 4j;@Slf4jpublic class Observer3扩展Observer { public Observer 3(Subject Subject){ this . Subject=Subject;this . subject . attach(this);} @ override public void update(){ log . info( Observer 3收到通知:{} ,this . subject . getstate());}}

 

  

1、观察者抽象类

包com . asur plus.common . observe;导入Java . util . ArrayList;导入Java . util . list;/* * * Subject */public class Subject {/* * * Observer List */private List Observer Observer=new ArrayList();/* * * flag */private int state;public int getState(){ return state;}/* * * ID已更改* * @ param state */public void setstate(int state){ this . state=state;//notifyAllObservers();}/* * *添加到收件人列表* * @ param observer */public void attach(observer观察者观察者){observers.add(观察者);}/* * *通知所有人已更改*/public void通知所有观察者(){for (observer观察者观察者3360观察者){ observer . update();}}}类似于消息发布,有多个接收者。当标志位改变时,多个接收器被通知。

 

  p>

  

2、第一个观察者

包com . asur plus.common . observe;类test main { public static void main(string[]args){//Create Subject Subject=new Subject();//添加观察者new observer 1(subject);新观察者2(受试者);新观察者3(受试者);//更改标志subject . setstate(10);} }输出结果

 

  可以看到,三个接收者都收到了事件通知,从而实现了我们的观察者模式。

  

3、第二个观察者

本文到此为止。希望它能帮到你,也希望你能多关注更多的盛行它的内容!

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: