我有一个带有一些属性的Channel和一个ChannelProxy扩展Channel。此ChannelProxy保存原始值,以便可以应用Optimistic Concurrency。您可以在无并发检查和乐观并发检查之间切换。
现在我想实现一个LazyLoadedChannel,它可以是Channel或ChannelProxy。不可能延长两者。这种问题有什么好的解决方案?
我可以创建一个LazyLoadedChannel(扩展Channel)和一个LazyLoadedChannelProxy(扩展ChannelProxy),但这意味着代码将在两个类中重复。
答案 0 :(得分:2)
看起来Decorator pattern是一种选择。
答案 1 :(得分:2)
装饰模式对我来说也是一个不错的选择。
但是,您可以这样做:
Channel
可配置为延迟加载或非延迟加载。您可以使用Strategy Pattern来实现此目的。 Channel
可配置,ChannelProxy
,因为它只是一个子类,所以也应该是可自动配置的。所以你可能不需要做更多的事情。 ChannelProxy
可能必须提供自己的LoadingStrategy
类。答案 2 :(得分:0)
如上所述(Dmitri),它看起来像是你装在频道上的装饰者。假设您的代理仅在需要时访问这些值 - 即当它们即将被更改时。