网站建设手机软件建网站需要哪些资质
web/
2025/10/3 5:22:45/
文章来源:
网站建设手机软件,建网站需要哪些资质,大型大型网站制作,西部数码网站管理助手2.0文章目录 1、简介2、观察者模式简单实现抽象主题#xff08;Subject#xff09;具体主题#xff08;ConcreteSubject#xff09;抽象观察者#xff08;Observer#xff09;具体观察者#xff08;ConcrereObserver#xff09;测试#xff1a; 观察者设计模式优缺点观察… 文章目录 1、简介2、观察者模式简单实现抽象主题Subject具体主题ConcreteSubject抽象观察者Observer具体观察者ConcrereObserver测试 观察者设计模式优缺点观察者模式的优点包括观察者模式的缺点包括 1、简介
观察者模式是一种行为型设计模式它定义了一种一对多的依赖关系当一个对象的状态发生改变时它的所有依赖者都会收到通知并自动更新。(MQ和它有点像) 当对象间存在一对多关系时则使用观察者模式Observer Pattern。比如当一个对象被修改时则会自动通知依赖它的对象。观察者模式属于行为型模式。 观察者模式中一共有四种角色
Subject抽象主题也称为被观察者或可观察者它是具有状态的对象并维护着一个观察者列表。抽象主题角色把所有观察者对象保存在一个集合里每个主题都可以有任意数量的观察者。主题提供了添加、删除和通知观察者的方法。一般用一个抽象类或者一个接口实现Observer抽象观察者为所有的具体观察者定义一个接口在得到主题的通知时更新自己。这个接口叫做更新接口。抽象观察者角色一般用一个抽象类或者一个接口实现。在这个示意性的实现中更新接口只包含一个方法即Update()方法这个方法叫做更新方法。ConcreteSubject具体主题也可称为具体被观察者该角色将有关状态存入具体观察者对象在具体主题的内部状态发生改变时给所有注册过的观察者发送通知。ConcrereObserver具体观察者实现抽象观察者定义的更新接口以便在得到主题更改通知时更新自身的状态。如果需要具体现察者角色可以保存一个指向具体主题对象的引用。
从具体主题角色指向抽象观察者角色的合成关系代表具体主题对象可以有任意多个对抽象观察者对象的引用。之所以使用抽象观察者而不是具体观察者意味着主题对象不需要知道引用了哪些ConcreteObserver类型而只知道抽象Observer类型。这就使得具体主题对象可以动态地维护一系列的对观察者对象的引用并在需要通知的时候调用每一个观察者共有的update()更新方法。这种做法叫做针对抽象编程。
2、观察者模式简单实现
拿博客专栏订阅为例网站用户的博客专栏为被观察者用户为观察者当有多个用户关注了yhz的JVM专栏当yhz的JVM专栏更新时就会通知这些订阅的用户。
抽象主题Subject
package DesignModel.Observer;import java.util.ArrayList;/*** BelongsProject: 3.9.demo* Author: yhz* CreateTime: 2023-07-26 17:58* Description: TODO* Version: 1.0*/
public abstract class Subject {//定义一个订阅者集合用于存储所有订阅了这个专栏的用户对象protected ArrayListObserverobservers new ArrayList();//注册方法用于向订阅者集合中增加一个订阅者public void attach( Observer observer ) {observers.add( observer );}//注销方法用于在订阅者集合中删除一个订阅者public void detach( Observer observer ) {observers.remove( observer );}//通知所有订阅者更新消息public abstract void notifyObservers(String message);
}具体主题ConcreteSubject
yhz的这个专栏为具体主题里面存储了订阅该专栏的网站用户并实现了抽象主题中的通知方法
package DesignModel.Observer;/*** BelongsProject: 3.9.demo* Author: yhz* CreateTime: 2023-07-26 18:18* Description: TODO* Version: 1.0*/
public class ConcreteSubject extends Subject{//重写通知方法为自己的Overridepublic void notifyObservers(String message) {//通知订阅了该主题的所有订阅者for(Observer observer:observers){observer.update(message);}}
}
抽象观察者Observer
package DesignModel.Observer;public interface Observer {//声明了更i性能方法void update(String message);
}
具体观察者ConcrereObserver
网站用户作为具体观察者里面实现了更新的方法
package DesignModel.Observer;/*** BelongsProject: 3.9.demo* Author: yhz* CreateTime: 2023-07-26 18:06* Description: TODO* Version: 1.0*/
public class Blooger implements Observer{//博主名称private String bloogerName;public Blooger(String bloogerName) {this.bloogerName bloogerName;}Overridepublic void update(String message) {System.out.println(bloogerNamemessage);}
}
测试
package DesignModel.Observer;/*** BelongsProject: 3.9.demo* Author: yhz* CreateTime: 2023-07-26 18:21* Description: TODO* Version: 1.0*/
public class Test {public static void main(String[] args) {ConcreteSubject subject new ConcreteSubject();Blooger blooger new Blooger(aa1);Blooger blooger2 new Blooger(aa2);Blooger blooger3 new Blooger(aa3);Blooger blooger4 new Blooger(aa4);subject.attach(blooger);subject.attach(blooger2);subject.attach(blooger3);subject.attach(blooger4);subject.notifyObservers(您关注的yhz更新了博客);}
}
结果打印
aa1您关注的yhz更新了博客
aa2您关注的yhz更新了博客
aa3您关注的yhz更新了博客
aa4您关注的yhz更新了博客观察者设计模式优缺点
观察者模式的优点包括
降低了主题与观察者之间的耦合关系两者之间是抽象耦合关系。可以很容易扩展观察者和被观察者。主题与观察者之间建立了一套触发机制。
观察者模式的缺点包括
主题与观察者之间的依赖关系并没有完全解除。当观察者对象很多时通知的发布会花费很长时间影响程序效率。观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的而仅仅只是知道观察目标发生了变化。如果在观察者和观察目标之间有循环依赖的话观察目标会触发它们之间进行循环调用可能导致系统崩溃。
在使用观察者模式时需要谨慎处理这些问题以确保系统的稳定性和效率。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/86032.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!