D语言中国主页  D语言编辑器SciTE4D   DWin库 D语言官方网站                                             
D语言编译器1.x最新版 OpenSource   Tango   webnews Wiki                                             

查看完整版本: D语言设计模式Observer

yidabu 2007-4-27 19:54

D语言设计模式Observer

D语言设计模式Observer知识若不分享 实在没有意义 http://www.d-programming-language-china.org 20070427点击下面网址查看原文:http://www.d-programming-language-china.org        by:        ideage        from:        http://ideage.javaeye.com/blog/57979        关键字:        设计模式 Observer        Observer设计模式        类型:行为型        意义: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。( 本文出处: http://www.d-programming-language-china.org )        适用:当一个抽象模型有两个方面, 其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。        当对一个对象的改变需要同时改变其它对象, 而不知道具体有多少对象有待改变。        当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换言之, 你不希望这些对象是紧密耦合的。        D的Phobos库std.signals实现了这个模式.        也可利用委托来简单实现.        DFL的事件委托分派机制就是个Observer模式实现.        [Copy to clipboard] [ - ]CODE:                                import std.signals;                import std.stdio;                                class Observer                {    // our slot                    void watch(char[] msg, int i)                    {                            writefln("Observed msg '%s' and value %s", msg, i);                    }                                    void exc(char[] msg, int i)                    {                            writefln("EXEC OBJECT '%s' and value %s", msg, i);                    }                }                                class Observera                {    // our slot                    void watch(char[] msg, int i)                    {                                writefln("LLPF msg '%s' and value %s", msg, i);                    }                }                                class Foo                {                    int value() { return _value; }                                    int value(int v)                    {                            if (v != _value)                            {    _value = v;                                // call all the connected slots with the two parameters                                emit("set Value to:", v);                            }                            return v;                    }                                    // Mix in all the code we need to make Foo into a signal                    mixin Signal!(char[], int);                                    private :                    int _value;                }                                void main()                {                    Foo a = new Foo;                    Observer o = new Observer;                    Observera b = new Observera;                                    a.value = 3;    // should not call o.watch()                    a.connect(&o.watch);    // o.watch is the slot                    a.connect(&o.exc);                    a.connect(&b.watch);    // o.watch is the slot                                    a.value = 4;    // should call o.watch()                    a.disconnect(&o.watch); // o.watch is no longer a slot                    a.value = 5;    // so should not call o.watch()                    a.connect(&o.watch);    // connect again                    a.value = 6;    // should call o.watch()                    delete o;    // destroying o should automatically disconnect it                    a.value = 7;    // should not call o.watch()                }                最后更新:2007-03-07 15:06( lastupdate:20070427 最新文章请访问http://www.d-programming-language-china.org )关于一大步成功社区:yidabu提倡在交流中学习,在分享中提高收集感兴趣的知识,写下心得,通过网络与别人一起分享理解一点就实践一步,收获什么就分享什么,成功就是这样一点点一步步累积起来的网络只是一个工具,只有自己身心提高才是实实在在的。d-programming-language-china.org为大家提供一个学习交流各种知识的平台
页: [1]
查看完整版本: D语言设计模式Observer