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()
}
分享到:
相关推荐
通过深入理解这些设计模式,我们可以更好地进行面向对象的分析与设计(OOA/D),提高代码的质量和系统的可维护性。 #### 0.1 设计模式解析(总序) 设计模式不仅仅是一系列具体的解决方案,更是一种思维方式。它们...
设计模式是面向对象编程领域中...通过阅读GoF的《设计模式:可复用面向对象软件的基础》等经典书籍,以及在项目中实践设计模式,可以提升开发人员对面向对象分析和设计(OOA/D)的理解,从而提高软件开发的效率和质量。
### C++设计模式精解 ...正如书中所提到的:“懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要。”希望每位读者都能通过本书的学习,掌握设计模式的精髓,提升自己的编程技巧和软件设计能力。
Martin所说的:“懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要。” #### 0.2 设计模式解析后记 本书不仅介绍了设计模式的概念和原理,还通过实际的C++代码实现了这些模式,帮助读者更好地理解和掌握...
掌握了设计模式,就相当于掌握了面向对象分析和设计(OOA/D)的核心。在实际的软件开发过程中,设计模式使得软件系统的结构更加合理,提高了代码的可重用性、可维护性以及系统的扩展性,它能够帮助开发者写出更加...
从引言中可以看出,设计模式对于面向对象分析和设计(OOA/D)来说至关重要。设计模式不是某种特定的代码,而是一种概念上的解决方案框架,它帮助开发者解决软件设计中经常出现的问题。从Singleton模式可以看出,设计...
本书作者提到,“懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要”,这反映了设计模式在面向对象编程中的核心地位。通过对GoF设计模式的研究与实践,可以极大地提升软件系统的灵活性、可扩展性和可维护性。...
本文旨在深入解析由GoF(Gang of Four)提出的23种设计模式,并通过C++语言具体实现这些模式来帮助读者更好地理解和掌握面向对象设计的核心思想。设计模式作为面向对象编程的重要组成部分,为解决特定问题提供了一套...
掌握设计模式意味着理解面向对象分析与设计(OOA/D)的核心精髓。设计模式不仅仅是编程技巧的集合,更是开发者思想的体现。 #### 1. 创建型模式 - **Factory 模式**:此模式提供了一个创建对象的接口,但允许子类...
”掌握设计模式不仅能够提高面向对象分析和设计(OOA/D)的能力,还能让开发者在面对复杂问题时拥有更多创新解决方案。 ##### 0.2 设计模式解析后记 本书通过对每个设计模式进行详细解析,不仅介绍了模式的基本概念...
正如本书作者所言,“懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要”。 #### 三、设计模式分类 GoF中的23种设计模式被分为三大类:创建型模式、结构型模式和行为型模式。 ##### 1. 创建型模式 - **...
7. **设计模式的两大主题**:设计模式关注的是系统复用与系统扩展(选D),通过模式的应用,可以提高代码的可重用性和可维护性。 8. **单例模式**:单例模式确保一个类只有一个实例,并提供一个全局访问点。其关键...
设计模式是软件工程领域中,面向对象分析和设计(OOA/D)的核心概念。它们为软件设计中常见问题提供了一系列经过验证的解决方案,旨在提升代码的可复用性、可扩展性和灵活性。本文件《设计模式C++版.pdf》深入探讨了...
UML 设计模式笔试题答案 UML(Unified Modeling Language,统一建模语言)是一种软件设计的标准语言,用于描述、构建和文档化软件系统。UML 提供了一种通用的语言和图形表示法,帮助软件开发者更好地理解和描述软件...
设计模式的学习和掌握是一个漫长且充满挑战的过程,但正如文中所述,“懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要”。它们不仅是编程技巧的提升,更是对软件架构深刻理解的体现。每个设计模式都是在...