标签: observer-pattern

观察数据变化的不同方式

在我的应用程序中,我有很多课程.这些类中的大多数存储了相当多的数据,如果其中一个数据类的内容发生变化,我的应用程序中的其他模块也会"更新".

这样做的典型方法是这样的:

void MyDataClass::setMember(double d)
{
m_member = d;
notifyAllObservers();
}
Run Code Online (Sandbox Code Playgroud)

如果不经常更改成员并且"观察类"需要尽可能快地更新,这是一个非常好的方法.

另一种观察变化的方法是:

void MyDataClass::setMember(double d)
{
setDirty();
m_member = d;
}
Run Code Online (Sandbox Code Playgroud)

如果成员多次更改,这是一个很好的方法,并且"观察类"会在所有"脏"实例中定期查看.

不幸的是,我的课程中混合了两种数据成员.有些是经常改变的(并且我可以和普通的观察者一起生活),其他的被改变很多次(这是在复杂的数学算法中)并且每当值改变时调用观察者将会破坏我的应用程序的性能.

是否还有其他观察数据变化的技巧,或者您可以轻松组合几种观察数据变化的不同方法的模式?

虽然这是一个与语言无关的问题(我可以尝试理解其他语言中的示例),但最终的解决方案应该适用于C++.

c++ language-agnostic design-patterns observer-pattern

4
推荐指数
1
解决办法
1116
查看次数

在Django中使用观察者模式的问题

我正在一个销售产品的网站上工作(一类销售,一类产品).每当我销售产品时,我想在History表中保存该操作,并且我决定使用观察者模式来执行此操作.

那就是:我的类Sales是主题而History类是观察者,每当我调用Sales类的save_sale()方法时,我都会通知观察者.(我决定使用这种模式,因为稍后我也会发送电子邮件,通知管理员等)

这是我的主题类(Sales类从此扩展)

class Subject:
    _observers = []

    def attach(self, observer):
        if not observer in self._observers:
            self._observers.append(observer)

    def detach(self, observer):
        try:
            self._observers.remove(observer)
        except ValueError:
            pass

    def notify(self,**kargs):
        for observer in self._observers:
            observer.update(self,**kargs)
Run Code Online (Sandbox Code Playgroud)

在视图上我做这样的事情

sale = Sale()
sale.user = request.user
sale.product = product
h = History() #here I create the observer
sale.attach(h) #here I add the observer to the subject class
sale.save_sale() #inside this class I will call the notify() method
Run Code Online (Sandbox Code Playgroud)

这是History的更新方法

def update(self,subject,**kargs):
    self.action = "sale"
    self.username = subject.user.username
    self.total …
Run Code Online (Sandbox Code Playgroud)

python django design-patterns observer-pattern

4
推荐指数
1
解决办法
1895
查看次数

Rails观察者不工作

我试图在我的rails应用程序中使用观察者在每次保存新的"注释"时在我的"事件"模型中创建一个新条目.评论保存得很好,但观察者没有正确创建事件.

// comment_observer.rb
class CommentObserver < ActiveRecord::Observer
  observe :comment

  def after_save(comment)
    event = comment.user.events.create
    event.kind = "comment"
    event.data = { "comment_message" => "#{comment.message}" }
    event.save!
  end
Run Code Online (Sandbox Code Playgroud)

这个观察者工作得很好我在控制台中使用它但它似乎没有正确观察; 当我尝试我的应用程序时,它似乎似乎没有创建事件.我没有看到错误或任何东西.

config.active_record.observers = :comment_observer也在我的environment.rb文件中.

我哪里错了?我应该采取不同的方法吗?

ruby-on-rails observer-pattern rails-activerecord

4
推荐指数
1
解决办法
3458
查看次数

未发射/或观察者未在magento中工作的事件

我有一个模块,可以收听一些事件.它在我测试过的至少十几个安装中工作正常.

在特定安装上,我在Magento版本1.4.1.1上安装了它的客户端,它不起作用.当我测试他的系统时,我手动触发事件,例如Mage :: dispatchEvent('..'),观察者会听到它们.

我该怎么看?我不知道这可能是什么原因.

debugging events magento observer-pattern

4
推荐指数
1
解决办法
5741
查看次数

rails观察者自定义回调

  1. 如何实现自定义call_back然后将方法注册到observer?

  2. 如果我们在模型中使用事务,是为事务内的每个记录触发after_create还是在事务完成后触发?

使用Rails 3

谢谢

transactions ruby-on-rails callback observer-pattern

4
推荐指数
1
解决办法
1449
查看次数

在关键价值观察员仍然注册时,"取消分配".转换为ARC后出错

我正在使用这堂课:

https://github.com/alexleutgoeb/ALPickerView

由于我转换为ARC,因此在点击pickerview几次后出现此错误:

2011-10-18 14:10:19.424 MappingApp[3398:10d03] An instance 0x73c7cd0 of class CustomTapGestureRecognizer was deallocated while key value observers were still registered with it. Observation info was leaked, and may even become mistakenly attached to some other object. Set a breakpoint on NSKVODeallocateBreak to stop here in the debugger. Here's the current observation info: <NSKeyValueObservationInfo 0x5d93430> (<NSKeyValueObservance 0x5d933f0: Observer: 0x5d66eb0, Key path: state, Options: <New: YES, Old: NO, Prior: NO> Context: 0x0, Property: 0x746b180>)
Run Code Online (Sandbox Code Playgroud)

该错误指向CustomTapGestureRecoginizer类和此方法的最后一行:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch dealloc ios observer-pattern automatic-ref-counting

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

Knockout的映射打破了可观察的数组

我遇到了Knockout映射插件的一个奇怪问题.

如果我通过映射填充可观察数组,我无法迭代数组或获取其长度,即使UI正确更新,数组似乎是空的.

你可以在这里找到一个有用的jsFiddle:http://jsfiddle.net/VsbsC/

这是HTML标记:

<p><input data-bind="click: load" type="button" value="Load" /></p>
<p><input data-bind="click: check" type="button" value="Check" /></p>
<table>
    <tbody data-bind="foreach: items">
        <tr>
            <td data-bind="text: name"></td>
            <td data-bind="text: value"></td>
        </tr>
    </tbody>
</table>
<p data-bind="text: total"></p>
Run Code Online (Sandbox Code Playgroud)

这是JavaScript代码:

var ViewModel = function () {
    var self = this;
    self.items = ko.observableArray();
    self.load = function () {
        self.items([
            { "name": "joey", "value": 1 },
            { "name": "anne", "value": 2 },
            { "name": "paul", "value": 3 },
            { "name": "mike", "value": 4 } …
Run Code Online (Sandbox Code Playgroud)

observer-pattern knockout-mapping-plugin knockout.js

4
推荐指数
1
解决办法
5062
查看次数

将额外的参数传递给Rails观察者

我在帐户模型中有几种方法:支付,接收,退款等我希望我的AccountObserver观看.但我想将额外的对象传递给我的AccountObserver.

例如,在我的帐户模型中,我想定义:

def pay
  ...
  notify_observers(:after_pay, payee, amount)

end
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

谢谢.

ruby-on-rails observer-pattern

4
推荐指数
2
解决办法
1586
查看次数

JFrame观察Controller但从未通知

另一个问题,我继续使用Singleton Observable.为什么ArticleSelect.update()不执行?

package net.bounceme.dur.usenet.swing;

import java.util.Observable;
import java.util.Observer;
import java.util.logging.Logger;
import javax.swing.ListModel;
import net.bounceme.dur.usenet.controller.ArticleDefaultListModel;
import net.bounceme.dur.usenet.controller.Controller;

public class ArticleSelect extends javax.swing.JPanel implements Observer {

    private static final Logger LOG = Logger.getLogger(ArticleSelect.class.getName());
    private Controller controller = Controller.getInstance();
    private ListModel defaultListModel = new ArticleDefaultListModel();

    public ArticleSelect() {
        controller.addObserver(this);
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated …
Run Code Online (Sandbox Code Playgroud)

java swing netbeans gui-builder observer-pattern

4
推荐指数
1
解决办法
266
查看次数

Magento加载产品事件观察员?

我正在处理的商店有一些自定义社区和本地模块,可以处理与目录产品相关的一些自定义项目.

我需要一个事件观察器,以便在加载时向目录项实例添加一些额外的数据.

如果这是正确的方法,我应该寻找什么事件?

如果您有任何其他提示,片段,我提前感谢您!

magento observer-pattern

4
推荐指数
1
解决办法
9804
查看次数