标签: observer-pattern

Eventbus是中介还是观察者模式?

Eventbus更像是调解者还是观察者?据谷歌称,"eventbus mediator"获得2.430次点击,"eventbus观察者"获得3.850次点击.

根据描述,他们都会匹配我想做的事情(调解员甚至更多).那么eventbus实现了一个特定的模式,还是我自己说的呢?

design-patterns mediator event-bus observer-pattern

14
推荐指数
4
解决办法
7320
查看次数

如何在javascript中实现观察者模式?

嗨,我想在JavaScript中实现观察者模式:

我的index.js:

$(document).ready(function () {
  var ironMan = new Movie();
  ironMan.setTitle('IronMan');
  ironMan.setRating('R');
  ironMan.setId(1);
  //  ironMan.setCast(['Robert Downey Jr.', 'Jeff Bridges', 'Gwyneth Paltrow']);

  var terminator = new Movie();
  terminator.setTitle('Terminator');
  terminator.setRating('P');
  terminator.setId(2);

  console.log(ironMan.toString());
  console.log(terminator.toString());

  ironMan.play();
  ironMan.stop();
  ironMan.download();
  ironMan.share('V. Rivas');

  console.log(ironMan.getCast()[0]);
});
Run Code Online (Sandbox Code Playgroud)

我的电影:

var title;
var rating;
var id;
var observers;


function Movie() {
  observers = new ObserverList();
}

//function Movie (title, rating, id){
//  this. title = title;
//  this.rating =  rating;
//  this.id =id;
//  observers = new ObserverList();
//} …
Run Code Online (Sandbox Code Playgroud)

javascript design-patterns observer-pattern

14
推荐指数
2
解决办法
3万
查看次数

如何观察'a'标签的内容 - jquery

我有一个空白<a>标签,内容通过外部javascript加载.我想观察<a>它及其内容更改何时执行另一项任务.内容只会改变一次.

可以这样做吗?

我也在使用jQuery.

提前致谢

javascript jquery dom dom-manipulation observer-pattern

13
推荐指数
2
解决办法
1120
查看次数

何时使用NSNotificationCenter

我希望在一个对象的多个事件上有多个观察者(1对N关系).

实现这一任务的机制由提供NSNotificationCenter.当用于我的问题时,该机制看起来相当矫枉过正.

如何在不使用以下情况下手动完成NSNotificationCenter:

- (void)addDelegate:(id<DelegateProtocol>)delegate;
- (void)removeDelegate:(id<DelegateProtocol>)delegate;
Run Code Online (Sandbox Code Playgroud)

从我的对象添加和删除观察者.

- (void)someEventFired:(NSObject<NSCopying> *)eventData
{
    for (id delegate in delegates) {
        NSObject *data = [eventData copy];
        [delegate someEventFired:data];
    }
}
Run Code Online (Sandbox Code Playgroud)

这种机制是直接的,易于实现,而对象不必共享其他字符串.

  • 除了NSNotificationCenter?之外,iOS框架中是否存在1对N代表(如C#事件)的官方模式?
  • 什么时候应该NSNotificationCenter使用,何时不使用?
  • 什么时候应该使用像我在这里建议的实现,什么时候不使用?

architecture objective-c nsnotificationcenter ios observer-pattern

13
推荐指数
1
解决办法
7232
查看次数

WPF中的.NET(Rx)反应扩展 - MVVM

我在我的WPF应用程序中使用Caliburn.Micro的.NET(Rx)的Reactive扩展.我正在尝试移植我的WPF应用程序以使用MVVM架构,我需要监视TextBox控件的Text属性中的更改.

如果Text属性的最后一次更改超过3秒前,我需要调用服务的LoadUser方法.

将逻辑从我的旧解决方案移植到具有MVVM架构的新解决方案.

XAML:

<TextBox Name="Nick" 
         Grid.Row="0"
         FontSize="14"
         Margin="2,2,2,2" 
         HorizontalAlignment="Stretch" 
         TextChanged="Nick_TextChanged" />
Run Code Online (Sandbox Code Playgroud)

代码背后我有这个:

...

Observable.FromEvent<TextChangedEventArgs>(Nick, "TextChanged")
          .Select(e => ((TextBox)e.Sender).Text)
          .Where(text => text.Length > 3)               
          .Do(LoadUser)     
          .Throttle(TimeSpan.FromSeconds(3000))     
          .Subscribe(LoadUser);

...
private  void LoadUser(string text){...}
Run Code Online (Sandbox Code Playgroud)

我想在我的视图模型类中使用Observable.FromEvent.像这样的东西

WPF与MVVM

视图:

<TextBox Name="Nick" 
         Grid.Row="0"
         FontSize="14"
         Margin="2,2,2,2" 
         HorizontalAlignment="Stretch"
         Micro:Message.Attach="[TextChanged]=[Action TextChanged()]"/>
Run Code Online (Sandbox Code Playgroud)

查看型号:

[Export(typeof(IAddFriendViewModel))]
public class AddFriendViewModel : Screen, IAddFriendViewModel
{
    private string _nick;

    public string Nick
    {
        get { return _nick; }
        set
        {
            _nick = value;
            NotifyOfPropertyChange(()=>Nick);
        }
    }

    ...

    //how can I access …
Run Code Online (Sandbox Code Playgroud)

wpf system.reactive caliburn.micro observer-pattern

12
推荐指数
1
解决办法
8152
查看次数

实现信号(观察者模式):是必需的还是const_cast?

我正在实现我自己的signal/ slot(观察者模式,Qt样式)机制,所以我可以property通知......那些已经改变了.

我认为C++ 11提供了所有必要的功能,可以实现非常简洁和功能强大的实现.我遇到的"问题"是如果我想"连接"到const对象的信号,我需要将signal::connect函数设置为const,但修改回调/观察者列表.有两种直接解决方法:

  1. const_cast里面的清单connect.
  2. 制作清单mutable.

在我看来,两者都是相同的东西(之前已经问过这个问题,例如这个问题中),并且在逻辑上非常精细,但风格上有问题.因此问题.有没有办法绕过这个或这是一个真正合理的使用const_cast/ mutable

我现在有一些prelimenary代码:

template<typename... ArgTypes>
class signal
{
public:
  template<typename Callable>
  void connect(Callable&& callback) const
  {
    std::lock_guard<std::mutex> lock(slots_mutex);
    slots.emplace_back(callback);
  }

  void emit(ArgTypes... arguments) const
  {
    std::lock_guard<std::mutex> lock(slots_mutex);
    for(auto&& callback : slots)
    {
      callback(arguments...);
    }
  }

private:
  // mutable here allows to connect to a const object's signals
  mutable std::vector<std::function<void(ArgTypes...)>> slots;
  std::mutex slots_mutex; …
Run Code Online (Sandbox Code Playgroud)

c++ signals-slots observer-pattern c++11

12
推荐指数
1
解决办法
333
查看次数

使用委托在C#中实现的观察者模式?

有一个问题已经回答是在C#中,是不是已经使用事件实现的观察者模式?

它询问观察者模式是否已在c#中使用事件实现.

虽然我得到了事件和观察者模式,但不是观察者模式真的只是委托和事件是进一步的实现吗?

c# events delegates design-patterns observer-pattern

11
推荐指数
1
解决办法
7552
查看次数

Magento在观察者中重新计算购物车总数

我有一个观察员,如果他们缺货就会从购物车中移除物品(即顾客返回购物车的时间x,购物车中的商品已经缺货),并向用户显示消息.

删除项目有效,但更新购物车总数不会. 任何帮助将非常感激!

我的观察者观察sales_quote_save_before事件:

public function checkStockStatus($observer)
{
    // return if disabled or observer already executed on this request
    if (!Mage::helper('stockcheck')->isEnabled() || Mage::registry('stockcheck_observer_executed')) {
        return $this;
    }

    $quote = $observer->getEvent()->getQuote();
    $outOfStockCount = 0;

    foreach ($quote->getAllItems() as $item) {
        $product = Mage::getModel('catalog/product')->load($item->getProductId());
        $stockItem = $product->getStockItem();
        if ($stockItem->getIsInStock()) {
            // in stock - for testing only
            $this->_getSession()->addSuccess(Mage::helper('stockcheck')->__('in stock'));
            $item->setData('calculation_price', null);
            $item->setData('original_price', null);
        }
        else {
            //remove item 
            $this->_getCart()->removeItem($item->getId());
            $outOfStockCount++; 
            $this->_getSession()->addError(Mage::helper('stockcheck')->__('Out of Stock'));
        }
    }

    if ($outOfStockCount) > 0) {       
        $quote->setTotalsCollectedFlag(false)->collectTotals();
    } 

    Mage::register('stockcheck_observer_executed', …
Run Code Online (Sandbox Code Playgroud)

session magento cart observer-pattern

11
推荐指数
2
解决办法
3万
查看次数

观察动画期间UIView的帧变化

我想观察UIView原点的x坐标在使用动画时的变化animateWithDuration:delay:options:animations:completion:.我想在粒度级别跟踪此动画期间x坐标的变化,因为我想在交互中更改另一个视图,即动画视图可能与之接触.我想在确切的联系点做出改变.我想了解在更高层次上做这样的事情的最佳方法:

- 我应该animateWithDuration:...在联系点的完成回电中使用吗?换句话说,第一个动画一直运行直到它到达那个x坐标,其余的动画发生在完成回调中?

- 我应该使用NSNotification观察者并观察框架属性的变化吗?这有多准确/精细?我可以跟踪x的每个变化吗?我应该在一个单独的线程中这样做吗?

欢迎任何其他建议.我正在寻找一个很好的练习.

animation uiview ios observer-pattern

11
推荐指数
2
解决办法
4583
查看次数

Java中侦听器的正确(和最佳)集合类型

我只是想在我的一个类中引入一个小的观察者模式(听众),我想使用最佳实践方法.

我的监听界面:

public interface ExpansionListener {
    void expanded();
    void collapsed();
}
Run Code Online (Sandbox Code Playgroud)

因此,我想保留一个听众列表

private List listener; // What kind of list should I take?
Run Code Online (Sandbox Code Playgroud)

和两种方法addListener(ExpansionListener l)removeListener(ExpansionListener l).

现在,我的问题是:我应该采取什么样的清单?我想过使用像CopyOnWriteArrayList这样的并发列表,但我发现EventListenerList也存在.Java中监听器列表的最佳实践方法是什么?

java listener observer-pattern eventlistenerlist

11
推荐指数
1
解决办法
664
查看次数