标签: observer-pattern

获取通用接口的错误:接口Observer不能使用不同的参数多次实现:

我在编写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类的情况下解决此问题?

java gwt observer-pattern

8
推荐指数
1
解决办法
3973
查看次数

问题实施观察者模式:"成员参考基础类型________不是结构或联合"

我一直在实现一个准确的观察者模式,并且陷入了一个有点神秘的错误:"成员引用基类型'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)

c++ templates iterator list observer-pattern

8
推荐指数
1
解决办法
7631
查看次数

如何使用rspec测试Mongoid :: Observer

在一个简单的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)

什么是验证此行为的最佳方法?

ruby rspec ruby-on-rails mongoid observer-pattern

8
推荐指数
1
解决办法
1164
查看次数

MVC Java:Controller如何将侦听器设置为View的子类

我有一个控制器,一个带有孩子的孩子可以看到很多孩子的视图.示例:JPanel中的JPanels,其中包含用于控制器传递给模型的按钮和字段.

我正在做的当前方式是在视图中实例化"控制器",它们具有动作侦听器并访问我的模型,这些模型是单例.这工作 - 但它绝对不是MVC.

所以问题是 - 我该怎么办?

是从控制器菊花链的唯一方法:mainview.getSubView().getSubView().getSubView().setActionListener(new AL()); 和:mainview.getSubView().getSubView().getSubView().getSomeTextFieldText();

这似乎非常不切实际[我看不出这种方法的好处]

任何提示或指导都会有所帮助.我看到的没有教程解释了带有子视图的MVC.

在旁注 - 我知道我应该让视图和模型使用observable/observer - 但即使是那些我在设置动作监听器时遇到问题.

java model-view-controller observer-pattern

8
推荐指数
1
解决办法
1万
查看次数

JavaScript代理的替代品

我想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)

javascript observer-pattern ecmascript-6 es6-proxy

8
推荐指数
1
解决办法
1573
查看次数

Data Mapper + Observer模式

我正在用PHP构建应用程序,我正在使用数据映射器模式进行数据库访问.我正在考虑使用Observer模式让我的所有映射器观察它们创建的实体,这样它们就可以自动将任何更改保存回数据库而无需手动解析它们.

我只是想知道这是不是一个好主意,或者这是不好的做法等等?

我通常使用一些在层次结构中链接在一起的对象,并且目前必须手动将每个对象解析为它的映射器,这是相当繁琐的,所以只是尝试提出一个更好的解决方案.

谢谢,杰克

php datamapper observer-pattern

7
推荐指数
1
解决办法
1452
查看次数

如何修改现有的AS3事件以便我可以传递数据?

所以我想要一种方法来设置事件,以便我可以传递数据而不会创建闭包\内存泄漏.这是我所拥有的:

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)

events listener actionscript-3 observer-pattern

7
推荐指数
1
解决办法
4430
查看次数

Magento:如何禁用或更改核心观察者方法的工作方式

我一直在想这个问题.如果Magento编写了一个核心Observer类并执行了一个你不希望它执行的功能,或者你想要重写它,该怎么办?有没有办法说,不要在Observer中使用此方法,只需使用我的.如果我为自己的Observer设置一个方法,它不会只是首先执行核心功能,然后是我实现的任何内容吗?

例如,Magento希望在Observer方法中将一些数据保存到数据库中,但我不希望它保存该数据,我希望它保存一些其他数据,我已将列或属性添加到数据库中.

php magento observer-pattern

7
推荐指数
2
解决办法
4673
查看次数

制作JFrame和Observable对象

我有一个类,比方说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),必须在通知之前调用它.

你对我能实现它有什么想法吗?

谢谢!!

java swing observable observer-pattern

7
推荐指数
2
解决办法
6058
查看次数

Pub/Sub Vs Observer Vs Reactive

当我之前使用像MVVMLight之类的Pub/Sub模式框架时,我已经看到订阅者的调用是同步处理的.从可扩展性的角度来看,像Rx这样的反应式框架是否有助于将pub和sub完全解耦和扩展的可伸缩性?哪种模式有助于扩展?

publish-subscribe reactive-programming observer-pattern

7
推荐指数
1
解决办法
1653
查看次数