Eventbus更像是调解者还是观察者?据谷歌称,"eventbus mediator"获得2.430次点击,"eventbus观察者"获得3.850次点击.
根据描述,他们都会匹配我想做的事情(调解员甚至更多).那么eventbus实现了一个特定的模式,还是我自己说的呢?
嗨,我想在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) 我有一个空白<a>标签,内容通过外部javascript加载.我想观察<a>它及其内容更改何时执行另一项任务.内容只会改变一次.
可以这样做吗?
我也在使用jQuery.
提前致谢
我希望在一个对象的多个事件上有多个观察者(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
我在我的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.像这样的东西
视图:
<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) 我正在实现我自己的signal/ slot(观察者模式,Qt样式)机制,所以我可以property通知......那些已经改变了.
我认为C++ 11提供了所有必要的功能,可以实现非常简洁和功能强大的实现.我遇到的"问题"是如果我想"连接"到const对象的信号,我需要将signal::connect函数设置为const,但修改回调/观察者列表.有两种直接解决方法:
const_cast里面的清单connect.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) 我有一个观察员,如果他们缺货就会从购物车中移除物品(即顾客返回购物车的时间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) 我想观察UIView原点的x坐标在使用动画时的变化animateWithDuration:delay:options:animations:completion:.我想在粒度级别跟踪此动画期间x坐标的变化,因为我想在交互中更改另一个视图,即动画视图可能与之接触.我想在确切的联系点做出改变.我想了解在更高层次上做这样的事情的最佳方法:
- 我应该animateWithDuration:...在联系点的完成回电中使用吗?换句话说,第一个动画一直运行直到它到达那个x坐标,其余的动画发生在完成回调中?
- 我应该使用NSNotification观察者并观察框架属性的变化吗?这有多准确/精细?我可以跟踪x的每个变化吗?我应该在一个单独的线程中这样做吗?
欢迎任何其他建议.我正在寻找一个很好的练习.
我只是想在我的一个类中引入一个小的观察者模式(听众),我想使用最佳实践方法.
我的监听界面:
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中监听器列表的最佳实践方法是什么?