我找不到如何实现这个(我为自由式记录道歉):
//assign the event handler for the object "myObj"
myObj.onMyEvent = //do something
//if something happened somewhere, then run the event
MyEvent.fire();
Run Code Online (Sandbox Code Playgroud)
我们的想法是调用(生成)一些自定义事件(MyEvent).我们有一个对象"myObj"能够识别"MyEvent"的出现,并以某种方式(以他自己的方式)来响应它.另外,我们有其他对象(不同的排序),(以他们自己的方式)对"MyEvent"作出反应.
我知道有"观察者模式",但我找不到具体的实现.
你能告诉我在哪里读一下吗?或者在自然界中一般不可能?或者完全不同?
更新1:没有JS库,请(jQuery,Prototype,YUI,...)
在我的自定义模块中,我在会话变量中设置了一个标志,并且在controller_action_layout_render_before事件中,检查是否设置了标志然后附加自定义内容.
我想在页面加载后取消设置会话变量中的标志.
怎么做到呢.
当页面加载时,是否有任何事件在最后执行?
我的观察者没有被召唤.我想知道如何调度事件以便我可以调试它.
我在我的LanguageOfSystem bean中使用CDI Observer模式.
@Named(value = "languageOfSystem")
@SessionScoped
public class LanguageOfSystem implements Serializable {
@Inject private JsfUtils eeJsfUtils;
@Inject private Event<LangEvent> langEvent;
private LangEvent docLangEvent = new LangEvent();
Run Code Online (Sandbox Code Playgroud)
LangEvent的简单地说:
package jav;
import java.util.Locale;
public class LangEvent {
private Locale locale;
public Locale getLocale() {
return locale;
}
public void setLocale(Locale locale) {
this.locale = locale;
}
}
Run Code Online (Sandbox Code Playgroud)
一切正常,但NetBeans给了我一个警告:

Unstatisfied dependency: no bean matches the injection point.
Run Code Online (Sandbox Code Playgroud)
我应该检查或更改一些东西吗?
我已经addObserver:selector:name:object:进入了viewDidLoad.
我正在用removeObserver:name:object:它viewWillDisappear:animated:来移除观察者.
如果我通过传递错误的参数来删除观察者,会发生什么removeObserver:name:object:?
(例如,如果我向参数name或错误对象传递错误通知,则不会删除观察者object或Observer)
如果观察者在调用后仍然不是nil removeObserver:name:object:,我可以发现删除观察者失败,因为notifySelector将被调用.
但如果观察者在打电话后变为零removeObserver:name:object:,我就无法确定是否移除观察者是否失败.
当观察者变为零时,观察者会自动移除吗?
或做notification dispatch table的NSNotificationCenter越来越大,大,并最终应用变得慢?
编辑
当我为观察者使用UIViewController对象的子类时,在dealloc调用ViewController之后应用程序不会崩溃.
但是当我使用其他类的对象时,应用程序会在dealloc调用对象后崩溃.
使用Pharo Smalltalk中的Announcements框架,是否还有理由使用经典的Smalltalk-80相关/更改/更新机制?
我是用模式编程的新手,我花了几个小时搜索模式观察者的Smalltalk实现的样本但是徒劳无功.如果有人能够在Smalltalk下为我提供这种模式实现的具体示例,我将非常感激.
我想用Delphi实现观察者模式.这是一个接口ISubject和一个TWeatherData实现观察者的类.
ISubject = interface
procedure notifyObservers;
procedure removeObserver(o: IObserver);
procedure registerObserver(o: IObserver);
end;
TWeatherData = class(TInterfacedObject, ISubject)
private
observers: TList;
FTemperature: Double;
FHumidity: Double;
FPressure: Double;
public
// ...
procedure notifyObservers;
procedure setMeasurements(ATemperature, AHumidity, APressure: Double);
end;
Run Code Online (Sandbox Code Playgroud)
我得到一个访问冲突有关的读取地址的时候TWeatherData.notifyObservers执行
procedure TWeatherData.notifyObservers;
var
observer: ^IObserver;
begin
for observer in observers do
observer.Update(FTemperature, FHumidity, FPressure); //oops -> there raised AV.
end;
procedure TWeatherData.setMeasurements(ATemperature, AHumidity,
APressure: Double);
begin
measurementsChanged; // and this one calls …Run Code Online (Sandbox Code Playgroud) 如前所述这里在Swing的背景下,GUI的设计使得频繁使用的观察者模式.经常使用中规定的方案EventListenerList,是否有一个Java FX示例,例如Converter,关注模式本身?
我正在使用代码,它有很多观察者模式实现.所有这些都以这样的方式组织:
一些接口由观察者实现:
class ObserverInterface {
virtual void FooOccurs() = 0;
};
Run Code Online (Sandbox Code Playgroud)
一些实现注册,取消注册和通知的类:
class ObservableImpl {
public:
Register(ObserverInterface *observer);
Unregister(ObserverInterface *observer);
private:
void SomeMethod() {
// foo things
for(auto &observer: observers) {
observer.FooOccurs();
}
}
};
Run Code Online (Sandbox Code Playgroud)
每次有注册和取消注册的复制粘贴以及ObserverInterface的每个方法的通知实现.每当程序员必须记住调用Unregister()时,如果它的观察者将被破坏.
我希望将观察者模式包含在两个类模板中.到目前为止,我有类似的东西:http: //rextester.com/UZGG86035
但我不确定我是不是要重新发明轮子.是否有更容易,众所周知的方法来做到这一点?
observer-pattern ×10
events ×2
magento ×2
smalltalk ×2
c++ ×1
c++11 ×1
cdi ×1
custom-event ×1
delphi ×1
delphi-xe ×1
ios ×1
iphone ×1
javafx ×1
javascript ×1
netbeans ×1
objective-c ×1
observable ×1
pharo ×1
swing ×1
visualworks ×1
warnings ×1