3

我喜欢设计模式,问题是有些实现起来真的很乏味。例如,装饰一个有 20 多个成员的对象就很烦人。

因此,我想创建一个很好的设计模式库以应用于类(作为基类或属性),以使这些模式的实现更快、更容易。

问题是......我不太确定从哪里开始 - 因为我大多不熟悉属性和反射。


我想利用属性来标记 Singletons(类似于 Export 标签)、Multitons 和 Decorators...如果可能的话。但我什至不知道从哪里开始创建一个改变其实例功能的单例属性。

我有限的研究使我相信,通过属性使用反射/后期绑定并获得对程序集中所有标记类的访问权限,将允许您将一个单例组合在一起......但我仍然不完全确定这将如何做完了。

我发现的一个名为Ninject 1.0 的框架创建了一个 Singleton 属性 - 但该库是如此广泛且未记录,以至于我目前无法遵循它的逻辑。


我觉得具有这种功能的库将对那里的许多开发人员做出巨大贡献。因此,如果有人可以提供一些示例代码,让我指出正确的方向来创建这些模式之一作为属性,将不胜感激 - 其代码没有过度涉及。或者,如果有人愿意带我完成 Ninject 的单例属性实现,那么我可以解决这个问题......

感谢您的时间和考虑。

4

1 回答 1

4

我认为您对设计模式的含义有些困惑。

模式实际上是一种常见的做事方式,旨在解决特定问题

您并没有真正为了模式而使用模式。更多的模式使用并不自动意味着好的。您使用模式来解决类型问题——并且希望该模式是公认的解决该问题的最佳实践方法。不要尝试将模式应用到您的代码中,因为您可以.

现在,在这一切之后,确实可以看出您计划做的并不是实现模式的正确方法。您不会用属性等标记代码,然后将它们称为模式。模式就是你的代码。你的代码就是模式。例如,除非它真正实现了发布/订阅功能,否则您不会在类上标记发布者/订阅者模式。例如,你没有用“Singleton”标记一个类,然后它就变成了一个单例模式;使用单例模式需要您围绕该设计编写程序(和类)。

但是,您可以使用某些属性标记代码或类,以帮助检查代码/类是否符合特定模式。

例如,您可以实现一个检查所有类的类型检查器,检查是否有任何标记为“发布者”并查看该类是否实现了“IPublisher”接口。或者您的类型检查器可以检查是否有任何类被标记为“Singleton”,构造函数是否允许在任何时候构造多个实例。

但是属性和反射通常不是实现模式的工具。

在没有多重继承的 C# 中,您实现模式的方式有时仅通过基类。例如,您可以通过声明“SingletonObject”基类来实现“单例”模式,该基类将自身限制为仅一个实例化。然后你从这个基类派生任何你想成为单例的类。例如,您可以通过声明 IPublisher 和 ISubscriber 接口来实现“发布/订阅”模式。

现在,如果您真的只想在 C# 类上使用装饰器模式(根据您的问题的标题),那么您正在寻找的是一个自动包装器对象生成器。您可以将包装器基于 ExpandoObject,循环遍历基础对象的属性,然后将属性添加到仅委托回基础对象的 ExpandoObject。然后将新属性添加到基础对象之上的 ExpandoObject。瞧!你得到你的 auto-Decorator-Pattern 包装类生成器。

于 2011-03-23T05:29:15.330 回答