我正在尝试为学校项目实现一个 n 层架构应用程序。客户端和服务器之间的通信是通过 RESTful Web 服务完成的。我使用Jersey在Java中实现这一点。我唯一的问题是,如何在服务器上注册客户端以接收更改通知(就像通常使用观察者模式或监听/发布模式所做的那样)。我是否还需要在客户端实现一个服务,然后注册服务器要调用的 URL,然后在发生更改时调用这些 URL?
感谢您的帮助!
我有许多服务类,其call方法在参数上有变化。
notify我想在每个方法的末尾调用一个函数call。我不想修改这些服务类,但我愿意修改基类。
我正在玩,ActiveSupport::Callbacks但它不能达到不修改服务类的目的。
require 'active_support'
class Base
include ActiveSupport::Callbacks
define_callbacks :notifier
set_callback :notifier, :after do |object|
notify()
end
def notify
puts "notified successfully"
end
end
class NewPost < Base
def call
puts "Creating new post on WordPress"
# run_callbacks :notifier do
# puts "notifying....."
# end
end
end
class EditPost < Base
def call
puts "Editing the post on WordPress"
# run_callbacks :notifier do
# puts "notified successfully"
# end
end
end
person …Run Code Online (Sandbox Code Playgroud) 在GoF设计模式一书中,谈到观察者模式的实现部分时,有这样的规定:
将主题映射到其观察者 主题跟踪它应通知的观察者的最简单方法是在主题中显式存储对它们的引用。然而,当主体较多而观察者较少时,这种存储可能过于昂贵。一种解决方案是通过使用关联查找(例如哈希表)来以空间换取时间来维护主体到观察者的映射。因此,没有观察者的主题不会产生存储开销。另一方面,这种方法增加了接触观察者的成本。
我不明白使用哈希表如何提高存储容量。在 Java 中,对于每个主题,我们都可以有一个观察者列表List<Observer>。如果没有观察者附加到该主题,则列表引用将为空。如果我们使用哈希表,Map<Subject, List<Observer>我们仍然有列表,但我们也有对主题的引用,所以这种方式的内存效率有点低。不知道是否相关,Gof书中实现的语言是Smalltalk和C++。
我正在尝试创建自己的"模态"窗口,因为PrototypeJS目前不存在这些窗口,这符合我的需求.
问题是观察document.documentElement以更改视口(或document.body,取决于Quirks/Standard模式)的高度和宽度.
在哪里可以找到研究观察者模式的好材料?我需要一些代码示例和模型化情况的图片
Observer *o = New Observer();
Subject *s = new Subject() ;
s->register(o);
//Is it a good practice to delete the observer in the unregister function?
//I feel it is not. As the Observer object might still be in use, for example ,
//it might be registered to another Subject.
s->unregister(o);
//So it is safe to rely on the client code to delete the object or rely on the smart pointer things
delete o;
Run Code Online (Sandbox Code Playgroud)
我想确认关于谁应该删除观察者对象,我的上述理解是否正确.
我想在java中保留每个方法的观察者,即如果调用任何方法,我应该得到通知.或者如果任何成员变量被更新,我应该得到通知.有没有任何java框架可以做到这一点?
我有这种情况:
一个可观察的对象,另一个是观察者的对象.
观察者有一个update(Observable obs,Object obj)接收通过notifyObservers对象接收的方法.当观察者收到通知时,update方法打印更改的对象.我想在实现MVC模式的gui中打印出结果.我遵循这个指南MVC模式.我的想法是成为Controller观察者.类似的东西:
public class Controller extends AbstractController implements Observer
{
public static final String TOTAL_HIT_COUNT_PROPERTY = "Total Hit";
public void changeTotalHitCount(long new_total_hit_count)
{
setModelProperty(TOTAL_HIT_COUNT_PROPERTY, new_total_hit_count);
}
@Override
public void update(Observable o, Object arg)
{
}
}
Run Code Online (Sandbox Code Playgroud)
但我不知道这是否是正确的实施!
我正在构建一个包含GUI和模型的应用程序.我正在使用Observer模式(使用java的内置接口)在模型中的字段发生更改时更新GUI.
这通常工作正常,但我有一种情况,其中模型中的特定String变量(特别是文件的url)可以通过两个单独的JTextFields(swing)更改,其内容实际上反映了模型变量的值有问题.
我遇到的问题来自于这些JTextField之一的更改需要更新模型的状态以及其他JTextField的内容.我的模型确保仅在模型状态发生变化的情况下才将通知发送给观察者.但是,修改JTextFields的过程涉及消隐它的文本内容然后重新设置它.
没有太多细节,结果就是更新/通知过程陷入了infinte循环.我暂时通过抛开这个特定问题的观察者模式来解决这个问题,但我想知道是否有人能够建议一种巧妙的方法来确保特定组件不会被源自同一组件的更改"更新".
任何帮助赞赏.
使用toPromise抛出错误
老方法:
import 'rxjs/add/operator/toPromise';
Run Code Online (Sandbox Code Playgroud)
最新方式:
import { toPromise } from 'rxjs/operators';
Run Code Online (Sandbox Code Playgroud)
最新方式显示以下错误:
[ts]模块'"d:/.../ node_modules/rxjs/operators/index"'没有导出成员'toPromise'.
版本:
"typescript": "2.4.2"
"rxjs": "5.5.2",
Run Code Online (Sandbox Code Playgroud) observer-pattern ×10
java ×5
swing ×2
angular ×1
c++ ×1
callback ×1
dom ×1
ionic3 ×1
javascript ×1
jersey ×1
jtextfield ×1
observers ×1
oop ×1
prototypejs ×1
rest ×1
ruby ×1
rxjs ×1
typescript ×1
web-services ×1