草庐IT

Observer

全部标签

java - Observer 在 Java 9 中被弃用了。我们应该用什么来代替它?

Java9出来了,Observer已被弃用。这是为什么?这是否意味着我们不应该再实现观察者模式了?最好知道什么是更好的选择? 最佳答案 这是为什么?这是否意味着我们不应该再实现观察者模式?先回答后半部分——YES,这确实意味着您不应该再实现Observer和Obervable。Whyweretheydeprecated-他们没有为应用程序提供足够丰富的事件模型。例如,他们可能只支持某事发生变化的概念,但不传达任何关于发生变化的信息。Alex'sanswer前面很好地说明了Observer有一个弱点:所有Observable都是相同的

java - 在 Java 中实现观察者模式时避免暴露实现细节?

我从C#转到Java,在C#中事件是一等公民,事件处理程序可以是私有(private)方法。我现在正在开发一个Java项目,我当然需要使用观察者模式来实现事件。由于Observer需要将其监听器/处理程序回调方法公开给Observable类,这似乎是将Observer的细节实现公开给其他无关的类。我可以将对这些方法的访问设置为包级别,这将使这些实现细节对我的包的消费者隐藏,但它对我来说仍然有难闻的“气味”。这只是我需要咬紧牙关还是有更好的方法? 最佳答案 使用观察者模式,您正在观察的类不需要公开它们的实现。通知其他类的类通常会有自己

java - 获取通用接口(interface) : The interface Observer cannot be implemented more than once with different arguments: 的错误

我在编写GWT应用程序时在Eclipse中遇到此错误TheinterfaceObservercannotbeimplementedmorethanoncewithdifferentarguments:ObserverandObserverpublicclassCompositeWordListsextendsCompositeimplementsObserver,Observer这是界面publicinterfaceObserver{publicvoidupdate(To);}这样对吗?如何在不必为每个可能的事件创建大量观察者类的情况下解决这个问题? 最佳答

java - 在 Java 中同时使用 Observer 和 Observable 的模型设计不好吗?

这个问题与MVC(模型-View-Controller)有关。我的模型当前使用Java中的Observer/Observable模式更新我的View:publicclassModelextendsObservable{}publicclassViewimplementsObserver{@Overridepublicvoidupdate(observableo,Objectobj){//...updatetheviewusingthemodel.}}这很好用。但是,我的模型变得越来越复杂-它开始包含其他类的列表:publicclassModelextendsObservable{Lis

java - 如果调用 doOnSubscribe() 返回的对象,RxJava2 dispose() 不起作用

我无法理解为什么以下代码不起作用。我做错了什么还是RxJava2实现中的某种错误?privateDisposablesavedDisposable;@Testpublicvoidtest(){finalTestObserverobserver=newTestObserver();Observablet=Observable.just(10).delay(100,TimeUnit.MILLISECONDS).doOnSubscribe(disposable->savedDisposable=disposable);t.subscribe(observer);savedDisposable

c++ - 比较 observer_ptr< T > 和 T *

据我所知,observer_ptr提议包括与nullptr_t的(不)平等比较和交叉类型(即observer_ptr与observer_ptr)比较。没有与原始指针的比较,这在尝试将其逐渐引入现有代码库时有点烦人。问题1:如果我添加这些运算符,您是否预见到任何严重的问题(我在不同的命名空间中使用observer_ptr的单独实现,完全按照当前提案建模,我不会将这些添加到std::observer_ptr)?跟进:如果添加运算符不是一个好主意,那么在observer_ptr上使用get()会更好吗?与原始指针进行比较,还是将原始指针显式包装为observer_ptr会更好??编辑:显然不

zookeeper源码(07)leader、follower和observer

Leader构造方法publicLeader(QuorumPeerself,LeaderZooKeeperServerzk)throwsIOException{this.self=self;this.proposalStats=newBufferStats();//获取节点间通信地址SetInetSocketAddress>addresses;if(self.getQuorumListenOnAllIPs()){addresses=self.getQuorumAddress().getWildcardAddresses();}else{addresses=self.getQuorumAddre

c++ - 如何实现 observer_ptr?

我想在我的项目中使用observer_ptr,但是paper只定义了接口(interface),没有完整的实现。有没有自己实现的简单方法? 最佳答案 您可以创建所谓的observer_ptr简单地创建一个unique_ptr使用NOP删除器。templatestructnop_deleter{voidoperator()(T*)const{}};templateusingobserver_ptr=unique_ptr;这仍然会有unique_ptr的行为,意味着它只能移动,而你想要observer_ptr可复制。这使我们实现了更简单

c++ - 为什么 observer_ptr 在 move 后不归零?

为什么不是observer_ptrmove操作后归零?它在默认构造中被正确设置为nullptr,这确实有意义(并防止指向垃圾)。相应地,当std::move()开始时,它应该被清零,就像std::string、std::vector等这将使它成为多个上下文中的一个很好的候选者,在这些上下文中,原始指针是有意义的,并且自动在具有原始指针数据成员的类上生成move操作,例如thiscase.编辑正如@JonathanWakely在评论中指出的(与aforementionedquestion相关):ifobserver_ptrwasnullafteramoveitcanbeusedtoimp

zookeeper源码(07)leader、follower和observer

Leader构造方法publicLeader(QuorumPeerself,LeaderZooKeeperServerzk)throwsIOException{this.self=self;this.proposalStats=newBufferStats();//获取节点间通信地址Setaddresses;if(self.getQuorumListenOnAllIPs()){addresses=self.getQuorumAddress().getWildcardAddresses();}else{addresses=self.getQuorumAddress().getAllAddress