`
ideage
  • 浏览: 323998 次
社区版块
存档分类
最新评论

D语言设计模式 Observer

阅读更多
Observer设计模式

类型:行为型

意义: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。

适用:当一个抽象模型有两个方面, 其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。
当对一个对象的改变需要同时改变其它对象, 而不知道具体有多少对象有待改变。
当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换言之, 你不希望这些对象是紧密耦合的。

D的Phobos库std.signals实现了这个模式.
也可利用委托来简单实现.
DFL的事件委托分派机制就是个Observer模式实现.

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()
}
分享到:
评论
2 楼 hqs7636 2008-06-25  
好文!学习
1 楼 tomqyp 2007-03-07  
学习!

相关推荐

    设计模式精解-GoF 23种设计模式解析附C++.pdf

    通过深入理解这些设计模式,我们可以更好地进行面向对象的分析与设计(OOA/D),提高代码的质量和系统的可维护性。 #### 0.1 设计模式解析(总序) 设计模式不仅仅是一系列具体的解决方案,更是一种思维方式。它们...

    23种设计模式(C++).pdf

    设计模式是面向对象编程领域中...通过阅读GoF的《设计模式:可复用面向对象软件的基础》等经典书籍,以及在项目中实践设计模式,可以提升开发人员对面向对象分析和设计(OOA/D)的理解,从而提高软件开发的效率和质量。

    设计模式精解-GoF 23种设计模式解析附C++实现源码.pdf

    书中提到,理解设计模式是掌握面向对象分析与设计(OOA/D)精髓的关键所在。通过深入研究GoF的23种模式,读者不仅能学到设计模式本身,还能掌握如何在实际项目中灵活运用它们。 #### 0.2 设计模式解析后记 作者在...

    23种设计模式解析附C++实现

    掌握了设计模式,就相当于掌握了面向对象分析和设计(OOA/D)的核心。在实际的软件开发过程中,设计模式使得软件系统的结构更加合理,提高了代码的可重用性、可维护性以及系统的扩展性,它能够帮助开发者写出更加...

    C++版本设计模式

    从引言中可以看出,设计模式对于面向对象分析和设计(OOA/D)来说至关重要。设计模式不是某种特定的代码,而是一种概念上的解决方案框架,它帮助开发者解决软件设计中经常出现的问题。从Singleton模式可以看出,设计...

    c++设计模式GoF23

    掌握设计模式意味着理解面向对象分析与设计(OOA/D)的核心精髓。设计模式不仅仅是编程技巧的集合,更是开发者思想的体现。 #### 1. 创建型模式 - **Factory 模式**:此模式提供了一个创建对象的接口,但允许子类...

    23种设计模式 C++ PDF

    本文旨在深入解析由GoF(Gang of Four)提出的23种设计模式,并通过C++语言具体实现这些模式来帮助读者更好地理解和掌握面向对象设计的核心思想。设计模式作为面向对象编程的重要组成部分,为解决特定问题提供了一套...

    设计模式精解-GoF23种设计模式解析

    ”掌握设计模式不仅能够提高面向对象分析和设计(OOA/D)的能力,还能让开发者在面对复杂问题时拥有更多创新解决方案。 ##### 0.2 设计模式解析后记 本书通过对每个设计模式进行详细解析,不仅介绍了模式的基本概念...

    设计模式精解-GoF23种设计模式解析附C实现源码.pdf

    正如本书作者所言,“懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要”。 #### 三、设计模式分类 GoF中的23种设计模式被分为三大类:创建型模式、结构型模式和行为型模式。 ##### 1. 创建型模式 - **...

    c++设计模式 设计模式精解-GoF 23种设计模式解析附C++实现源码

    设计模式是面向对象分析和设计(OOA/D)的重要组成部分。它们提供了解决常见软件设计问题的标准化方法。通过学习和应用设计模式,开发者能够更高效地解决软件工程中的挑战,提高软件的质量和可维护性。设计模式不仅...

    java设计模式考试题.docx

    7. **设计模式的两大主题**:设计模式关注的是系统复用与系统扩展(选D),通过模式的应用,可以提高代码的可重用性和可维护性。 8. **单例模式**:单例模式确保一个类只有一个实例,并提供一个全局访问点。其关键...

    设计模式C++版.pdf

    设计模式是软件工程领域中,面向对象分析和设计(OOA/D)的核心概念。它们为软件设计中常见问题提供了一系列经过验证的解决方案,旨在提升代码的可复用性、可扩展性和灵活性。本文件《设计模式C++版.pdf》深入探讨了...

    UML设计模式笔试题答案.doc

    UML 设计模式笔试题答案 UML(Unified Modeling Language,统一建模语言)是一种软件设计的标准语言,用于描述、构建和文档化软件系统。UML 提供了一种通用的语言和图形表示法,帮助软件开发者更好地理解和描述软件...

    GoF+23种设计模式解析附C++实现源码

    掌握了设计模式,就相当于掌握了面向对象分析与设计(OOA/D)的核心要素。本文将详细介绍GoF的23种设计模式,并提供相应的C++实现源码,希望能为读者带来新的启示和灵感。 #### 三、设计模式分类 设计模式通常被分为...

Global site tag (gtag.js) - Google Analytics