我想在Dart中实现一个观察者模式,但是我不知道如何去做。
假设我有一门课:
class MyClass {
String observed_field;
}
现在,每当我更改字段时,我都希望将“observed_field changed”字符串打印到控制台中。使用自定义设置器非常简单:
class MyClass {
String _observed_field;
get observed_field => _observed_field;
set observed_field(v) {
_observed_field = v;
print("observed_field changed");
}
}
当然,如果我没有一个,而是许多这样的字段,我不想创建所有这些 getter 和 setter。显而易见的理论解决方案是将它们动态添加到类中,如下所示(不是工作代码,只是我希望它看起来如何的示例):
class MyClass
String _observeable_field;
String _observeable_field_2;
observe(#observeable_field, #observeable_field_2);
end
这可能吗?此外,如果没有在观察()
调用上方定义这些字段,而是编写如下内容,那将是非常棒的:
observe(String: #_observeable_field, String: #_observeable_field_2);
以便自动声明这些字段。
这里有一种使用Observe包的方法。该示例取自该包中的代码注释(并根据上面的示例进行了调整)。本质上,您使用@observable
注释来注释希望可观察的字段,然后监听更改(通过调用Observabled.dirtyCheck()
,触发更改);
首先,在 pubspec.yaml
中添加可观察包
dependencies:
observe: any
然后创建一个快速测试程序...
import 'package:observe/observe.dart';
class MyClass extends Object with Observable {
@observable String observedField = "Hello";
toString() => observedField.toString();
}
main() {
var obj = new MyClass();
// anonymous function that executes when there are changes
obj.changes.listen((records) {
print('Changes to $obj were: $records');
});
obj.observedField = "Hello World";
// No changes are delivered until we check for them
Observable.dirtyCheck();
print('done!');
}
这将生成以下输出:
Changes to Hello World were: [#<PropertyChangeRecord Symbol("observedField") from: Hello to: Hello World>]
done!
回应意见的更新...更新示例以省略< code > observable . dirty check()您可以使用setter和< code > notifyPropertyChanged ,而将类混合在< code>ChangeNotifier中
class MyClass2 extends Object with ChangeNotifier {
String _observedField = "Hello";
@reflectable get observedField => _observedField;
@reflectable set observedField(v) {
_observedField = notifyPropertyChange(#observedField, _observedField, v);
}
toString() => observedField;
}
本文向大家介绍c# 实现观察者模式,包括了c# 实现观察者模式的使用技巧和注意事项,需要的朋友参考一下 说明:主要参考《Head First设计模式(中文版)》,使用C#代码实现。 代码:Github 1、观察者模式UML图 2、气象监测类图 3、气象监测代码(书中C#版) 3.1 Observer 3.2 Subject 3.3 测试代码 4、使用C#中IObservable接口实现气象监测 4
是否有一种设计模式可以形成一个“复合”观察者/可观察者? 我的意思是我有一个可观察的,它在某个变化时通知它的监听器。 每个监听器也是一个可观察的,并通知它自己的监听器(在某个动作上,它做了哪个动作是由第一个可观察的通知触发的)。 这种观察者/可观察的“链接”作为设计是可以的,还是有一个标准的模式?
主要内容:介绍,实现,Subject.java,Observer.java,BinaryObserver.java,OctalObserver.java,HexaObserver.java,ObserverPatternDemo.java当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。 介绍 意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。 介绍 意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。 何时使用:一个对象(目标对象)
观察者模式是软件设计模式的一种。在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实时事件处理系统。 定义一个目标构造函数,并实现绑定、解绑和触发等方法: function Subject() { this.events = {}; this.count = 0; } Subj
问题 当一个事件发生时你不得不向一些对象发布公告。 解决方案 使用观察者模式(Observer Pattern)。 class PostOffice constructor: () -> @subscribers = [] notifyNewItemReleased: (item) -> subscriber.callback(item) for s