【问题标题】:Collections as decorators in C#集合作为 C# 中的装饰器
【发布时间】:2011-03-09 02:16:36
【问题描述】:

在设计集合基础架构时,我们遇到了一个非常“明显”的问题:假设您需要实现许多(子)类型的集合。其中一个方面是存储相关list数组等,另一个方面是行为相关orderedremove onlyobservable(每次更改都会触发事件)等等。

显然(再次),需求直接映射到众所周知的 Decorator 设计模式(listarray),其中存储- 相关方面将由多个行为(orderedobservable 等)修饰。

很高兴知道有人已经实现了类似的东西。因此,如果可能的话 - 请推荐/参考任何维护良好且满足上述要求的第三方库。

到目前为止谢谢:)

【问题讨论】:

  • 我遇到的唯一一个这样做的库是旧的 C++ Borland International Data Structures (BIDS) 库。也会对这种风格的任何 C# 库感兴趣。

标签: c# collections decorator


【解决方案1】:

我认为你误解了一些东西:

装饰器主要用于在运行时修改和添加行为。但是您引用的集合的属性需要在编译时可用。装饰器完全不适合向现有类添加更多方法。

虽然可以将集合的这些特征分解为接口(确实已经做到了1)),但这并不是装饰器的真正意义:装饰器包装了现有的实现类同一个界面。对于集合,继承比组合更有意义(或者可能确实需要)。


1) 几年后,我开始开发自己的此类库 Containers.NET,但由于初步基准测试显示原生 .NET 容器的速度有多快,尽管 Containers.NET 没有有任何额外的开销,我在项目走得很远之前就停止了。

【讨论】:

  • stackoverflow.com/questions/3133176/… - 在这里我问了更一般的问题(希望没关系)。我读了你的观点。只是想让装饰器的想法更进一步,即丰富运行时的行为和编译时和运行时的接口。为什么要编译时间?因为我想实例化一个 Observable、Ordered、ReadOnly、ThreadSafe List 实例。并且能够调用所有方法,例如“add/remove()”、“sort()”和“notifyChange()”。
  • @BreakPhreak:我已经阅读了你的另一个问题,这就是我来到这里的原因。我仍然认为你基本上是在误解。否则,我不明白你到底想达到什么目的。
  • PS:也许有人把你的想法更进一步或开发了他/她自己的替代方案。知道这样的产品存在会很有趣。
  • 我会尝试改写。无术语,我想使用一些集合框架,其中方面可以动态构造成任何可能的组合(与 OrderedReadOnlyThreadSafeList 相反,例如,我想分别实现 Ordered、ReadOnly ThreadSafe 和 List,但是可在编译/运行时组合)。这次我的目标听起来更好吗?
猜你喜欢
  • 1970-01-01
  • 2015-02-22
  • 1970-01-01
  • 2019-02-20
  • 2016-07-12
  • 2011-09-30
  • 2020-03-26
  • 1970-01-01
  • 2021-07-16
相关资源
最近更新 更多