我在编写GWT应用程序时在Eclipse中收到此错误
接口Observer不能使用不同的参数多次实现:Observer <CompositeListData>和Observer <DialogBoxAuthenticate>
public class CompositeWordLists extends Composite implements Observer<DialogBoxAuthenticate>, Observer<CompositeListData>
Run Code Online (Sandbox Code Playgroud)
这是界面
public interface Observer<T> {
public void update(T o);
}
Run Code Online (Sandbox Code Playgroud)
这是正确的吗?如何在不必为每个可能的事件创建大量Observer类的情况下解决此问题?
我一直在实现一个准确的观察者模式,并且陷入了一个有点神秘的错误:"成员引用基类型'Observer*'不是结构或联合".我认为这与我使用模板有关,我仍然相当不舒服.这是有问题的代码(为了简化事情,删除了大多数缺点/析构函数):
主题界面:
class Subject {
public:
virtual void notify();
private:
list< Observer * > m_observers;
};
Run Code Online (Sandbox Code Playgroud)
主题实施:
void Subject::notify() {
list< Observer * >::iterator i;
for ( i = m_observers.begin(); i != m_observers.end(); i++ ) {
*i->update( this ); // ERROR !!! ERROR
}
Run Code Online (Sandbox Code Playgroud)
观察者抽象界面:
class Observer {
public:
virtual ~Observer();
virtual void update( Subject * changedSubject ) = 0;
protected:
Observer();
};
Run Code Online (Sandbox Code Playgroud)
具体观察者界面:
class ConcreteObserver: public Observer {
public:
ConcreteObserver( ConcreteSubject * );
virtual ~ConcreteObserver();
virtual void update( Subject …Run Code Online (Sandbox Code Playgroud) 在一个简单的mongoid数据模型上,用户有很多评论,我想在用户写至少一条评论时给用户一个特定的徽章.所以我建立了一个像这样的观察者:
class CommentBadgeObserver < Mongoid::Observer
observe :comment
def after_create(comment)
CommentBadge.check_conditions_for(comment.user)
end
end
class CommentBadge < Badge
def self.check_conditions_for(user)
if user.comments.size > 1
badge = CommentBadge.create(:title => "Comment badge")
user.award(badge)
end
end
end
Run Code Online (Sandbox Code Playgroud)
user.award方法:
def award(badge)
self.badges << badge
self.save
end
Run Code Online (Sandbox Code Playgroud)
以下测试失败(但我想这是正常的,因为观察者在后台执行?)
it 'should award the user with comment badge' do
@comment = Factory(:comment, :user => @user)
@user.badges.count.should == 1
@user.badges[0].title.should == "Comment badge"
end
Run Code Online (Sandbox Code Playgroud)
什么是验证此行为的最佳方法?
我有一个控制器,一个带有孩子的孩子可以看到很多孩子的视图.示例:JPanel中的JPanels,其中包含用于控制器传递给模型的按钮和字段.
我正在做的当前方式是在视图中实例化"控制器",它们具有动作侦听器并访问我的模型,这些模型是单例.这工作 - 但它绝对不是MVC.
所以问题是 - 我该怎么办?
是从控制器菊花链的唯一方法:mainview.getSubView().getSubView().getSubView().setActionListener(new AL()); 和:mainview.getSubView().getSubView().getSubView().getSomeTextFieldText();
这似乎非常不切实际[我看不出这种方法的好处]
任何提示或指导都会有所帮助.我看到的没有教程解释了带有子视图的MVC.
在旁注 - 我知道我应该让视图和模型使用observable/observer - 但即使是那些我在设置动作监听器时遇到问题.
我想Proxy在一个ObservableList包含一个名为的自定义类上使用Array.由于Proxy仅在ES6之后可用,我想知道是否有任何替代实现.
我的要求是在ObservableList更改后对观察者进行更新(而不是引起注意),以便观察者总是使用一些过滤或映射方法与observable一起构成.
var activities = new ObservableList(['reading', 'swimming']);
var sAct = activities.filter(function(v) {
return v[0] === 's';
});
// expect sAct.list to be ['swimming']
var meAct = activities.map(function(v) {
return 'I am ' + v;
});
// expect meAct.list to be ['I am reading', 'I am swimming']
activities.list.push('smiling');
console.log(sAct.list, meAct.list);
// expect sAct.list to be ['swimming', 'smiling']
// expect meAct.list to be ['I am reading', 'I am swimming', 'I am …Run Code Online (Sandbox Code Playgroud) 我正在用PHP构建应用程序,我正在使用数据映射器模式进行数据库访问.我正在考虑使用Observer模式让我的所有映射器观察它们创建的实体,这样它们就可以自动将任何更改保存回数据库而无需手动解析它们.
我只是想知道这是不是一个好主意,或者这是不好的做法等等?
我通常使用一些在层次结构中链接在一起的对象,并且目前必须手动将每个对象解析为它的映射器,这是相当繁琐的,所以只是尝试提出一个更好的解决方案.
谢谢,杰克
所以我想要一种方法来设置事件,以便我可以传递数据而不会创建闭包\内存泄漏.这是我所拥有的:
package com.events {
import flash.events.Event;
public class CustomEvent extends Event {
public static const REMOVED_FROM_STAGE:String = "removedFromStage";
public var data:*;
public function CustomEvent(type:String, customData:*=null, bubbles:Boolean=false, cancelable:Boolean=false) {
super(type, bubbles, cancelable);
this.data = customData;
}
public override function clone():Event {
return new CustomEvent(type, data, bubbles, cancelable);
}
public override function toString():String {
return formatToString("CustomEvent", "type", "data", "bubbles", "cancelable", "eventPhase");
}
}
}
Run Code Online (Sandbox Code Playgroud)
这让我有以下行为:
function testme(e:Event) {
trace(e);
}
test_mc.addEventListener(CustomEvent.REMOVED_FROM_STAGE, testme);
test_mc.dispatchEvent(new CustomEvent(CustomEvent.REMOVED_FROM_STAGE, 42));
//Traces [CustomEvent type="removedFromStage" data=42 bubbles=false cancelable=false eventPhase=2] …Run Code Online (Sandbox Code Playgroud) 我一直在想这个问题.如果Magento编写了一个核心Observer类并执行了一个你不希望它执行的功能,或者你想要重写它,该怎么办?有没有办法说,不要在Observer中使用此方法,只需使用我的.如果我为自己的Observer设置一个方法,它不会只是首先执行核心功能,然后是我实现的任何内容吗?
例如,Magento希望在Observer方法中将一些数据保存到数据库中,但我不希望它保存该数据,我希望它保存一些其他数据,我已将列或属性添加到数据库中.
我有一个类,比方说MyJFrame我代表我的应用程序的GUI.它实现了接口Observer并覆盖了该方法update.
public class MyJFrame extends JFrame implements Observer{
...
public void update(Observable arg0, Object arg1){
...
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想让我的JFram成为一个Observable对象,但我不能,因为它已经扩展了类JFrame.我试图在我的类中创建一个Observable类型的变量.
public class MyJFrame extends JFrame implements Observer{
Observable observable = new Observable();
Run Code Online (Sandbox Code Playgroud)
这里的问题是我可以将Observer添加到这个可观察字段,我也可以通知观察者但是我不能调用该方法setChanghed()(因为它被声明为protected),必须在通知之前调用它.
你对我能实现它有什么想法吗?
谢谢!!
当我之前使用像MVVMLight之类的Pub/Sub模式框架时,我已经看到订阅者的调用是同步处理的.从可扩展性的角度来看,像Rx这样的反应式框架是否有助于将pub和sub完全解耦和扩展的可伸缩性?哪种模式有助于扩展?
observer-pattern ×10
java ×3
php ×2
c++ ×1
datamapper ×1
ecmascript-6 ×1
es6-proxy ×1
events ×1
gwt ×1
iterator ×1
javascript ×1
list ×1
listener ×1
magento ×1
mongoid ×1
observable ×1
rspec ×1
ruby ×1
swing ×1
templates ×1