标签: observer-pattern

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
查看次数

观察者设计模式 - 具体主题和观察者

我读过关于观察者设计模式的参考文献(GOF设计模式,头部设计模式,http://www.dofactory.com/Patterns/PatternObserver.aspx)规定了具体主题对具体观察者的参考.很像这样:

class ConcreteObserver : IObserver
{
    ConcreteSubject concreteSubjectInstance;
    //other code, etc.
} 
Run Code Online (Sandbox Code Playgroud)

现在,如果具体的Subject本身实现了一个Subject接口(或派生自一些抽象的Subject类),为什么不让ConcreteObserver中的类型成为那个抽象/接口?即

class ConcreteObserver : IObserver
{
    ISubject concreteSubjectInstance;
    //other code, etc.
} 
Run Code Online (Sandbox Code Playgroud)

而且,为什么不把它作为(例如)IObserver界面中的一个字段呢?

最终,鉴于模式本身似乎放松了主体与其观察者的耦合,为什么在将观察者与其主体耦合时,这似乎不会得到提升?

在此输入图像描述

或者是吗?我只是基于我读过的例子.

design-patterns observer-pattern

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

制作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
查看次数

是否可以将观察者添加到tableView.contentOffset?

我需要跟踪tableView.contentOffset.y是否可以将观察者添加到tableView.contentOffset?

我认为这是不可能的,因为contentOffset不会继承NSObject类.

还有其他解决办法吗?

uitableview ios observer-pattern

7
推荐指数
3
解决办法
8625
查看次数

Swing MVC - 事件传播和数据共享

我试图在swing应用程序中应用MVC模式.但是我面临两个主要问题,因为你有嵌套的面板层次结构,例如父 - >孩子 - >大孩子 - >大孩子.

问题1:当您有这样的层次结构时,如何在控制器和视图之间传输数据?如果我将数据从父母传递给孩子,那么就会有很多重复,如果我改变一个孩子,所有父母都需要改变.我不希望视图直接从数据库访问数据,我希望数据只通过控制器传输到视图.

问题2:如何在这种层次结构中将事件从视图传播到控制器?我正在考虑使用PropertyChangeListener.如果控制器必须采取任何操作,则将查看firePropertyChange事件.控制器将监听这些事件并执行某些操作.但是,如果我为层次结构执行此操作,那么将会出现代码重复.

我有三个可能有用的想法:

  1. 为每个面板使用控制器,但这样我最终会得到很多控制器.
  2. 使用Mediator设计模式,提供视图和控制器之间的通信.
  3. 使用将从视图中侦听所有属性更改事件的Central Reciever&Notifier,并通知感兴趣的控制器.但这只会解决我的第二个问题:

请参考下图了解第3个想法的图片.如果是第二个,调解员将进入中心.

如果有人以更好的方式实施此类问题,请评估并告知我们.

在此输入图像描述

java model-view-controller swing mediator observer-pattern

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

带螺纹的观察者模式

我想运行几个线程并在我的main方法结束时加入它们,所以我可以知道它们何时完成并处理一些信息.

我不希望将我的线程放在一个数组中并逐个执行join(),因为join是一个阻塞方法,我会在主线程中等待一些仍在运行的线程,而其他线程可能已经完成,没有可能知道.

我已经考虑过为我的线程实现一个观察者模式的可能性:一个带有update()方法的接口,一个从线程扩展的抽象类(或实现runnable),用于监听器的set和get方法以及一个启动所有线程的类等他们完成

如果我的理解是正确的,观察者就不会阻塞特定的join()来获取一个线程.相反,它将以某种方式等待,直到线程调用update()方法来执行操作.在这种情况下,应在线程完成后立即调用update().

我对如何实现这一点毫无头绪.我尝试过类似的模型,但我不知道如何使用观察者/监听器唤醒/阻止我的主线程.我用这个旧帖子作为模板:如何知道其他线程是否已完成?但是一旦线程调用update()方法,我找不到唤醒main方法的方法.将只为所有线程实例化一个观察者对象.

你能想到一种方法来使用观察者模式来等待所有线程完成而不会阻塞main一个接一个的join()调用吗?任何其他解决这个问题的建议将不胜感激.提前致谢.

java multithreading design-patterns observer-pattern

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

Pub/Sub Vs Observer Vs Reactive

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

publish-subscribe reactive-programming observer-pattern

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

Java中的可观察模式实现

我目前正在使用Java的Observer/Observable Pattern,我想知道:为什么在当前的实现中需要setChanged()方法?我知道它就在这里,所以我们只需要在治疗结束时调用notifyObservers()一次.

这样,如果我们想要我们可以使用clearChanged()回滚任何更改.但是,我们仍然可以在我们自己的实现中进行所有检查,并且只在我们绝对想要更新Observers 时调用notifyObservers().

我可能错过了一些东西,但我不明白他们为什么不这样简化它.有任何想法吗?

java design-patterns observer-pattern

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