设计问题

时间:2009-04-06 11:49:51

标签: design-patterns

我有一个带有一些属性的Channel和一个ChannelProxy扩展Channel。此ChannelProxy保存原始值,以便可以应用Optimistic Concurrency。您可以在无并发检查和乐观并发检查之间切换。

现在我想实现一个LazyLoadedChannel,它可以是Channel或ChannelProxy。不可能延长两者。这种问题有什么好的解决方案?

我可以创建一个LazyLoadedChannel(扩展Channel)和一个LazyLoadedChannelProxy(扩展ChannelProxy),但这意味着代码将在两个类中重复。

3 个答案:

答案 0 :(得分:2)

看起来Decorator pattern是一种选择。

答案 1 :(得分:2)

装饰模式对我来说也是一个不错的选择。

但是,您可以这样做:

  1. 使Channel可配置为延迟加载或非延迟加载。您可以使用Strategy Pattern来实现此目的。
  2. 一旦Channel可配置,ChannelProxy,因为它只是一个子类,所以也应该是可自动配置的。所以你可能不需要做更多的事情。
  3. :根据“加载”的含义,ChannelProxy可能必须提供自己的LoadingStrategy类。

答案 2 :(得分:0)

如上所述(Dmitri),它看起来像是你装在频道上的装饰者。假设您的代理仅在需要时访问这些值 - 即当它们即将被更改时。