Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 设计问题_Design Patterns - Fatal编程技术网

Design patterns 设计问题

Design patterns 设计问题,design-patterns,Design Patterns,我有一个具有一些属性的通道和一个扩展通道的通道代理。此ChannelProxy保留原始值,以便可以应用乐观并发。您可以在无并发检查和乐观并发检查之间切换 现在我想实现一个LazyLoadedChannel,它可以是通道或通道代理。扩展这两个方面是不可能的。什么是解决这类问题的好办法 我可以创建一个LazyLoadedChannel(扩展频道)和一个LazyLoadedChannelProxy(扩展频道代理),但这意味着代码将在这两个类中重复。看起来像是一个选项。看起来像是一个选项。如上所述(Dm

我有一个具有一些属性的通道和一个扩展通道的通道代理。此ChannelProxy保留原始值,以便可以应用乐观并发。您可以在无并发检查和乐观并发检查之间切换

现在我想实现一个LazyLoadedChannel,它可以是通道或通道代理。扩展这两个方面是不可能的。什么是解决这类问题的好办法


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

看起来像是一个选项。

看起来像是一个选项。

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

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

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

但是,您也可以这样做:

  • 将您的
    频道
    配置为延迟加载或非延迟加载。你可以用一个简单的方法来实现这一点
  • 一旦
    Channel
    可以配置,那么
    ChannelProxy
    也应该自动配置,因为它只是一个子类。所以你可能不需要再做什么了
  • 或者:根据“加载”的要求,
    ChannelProxy
    可能必须提供自己的
    LoadingStrategy

  • 装饰图案对我来说也是个不错的选择

    但是,您也可以这样做:

  • 将您的
    频道
    配置为延迟加载或非延迟加载。你可以用一个简单的方法来实现这一点
  • 一旦
    Channel
    可以配置,那么
    ChannelProxy
    也应该自动配置,因为它只是一个子类。所以你可能不需要再做什么了
  • 或者:根据“加载”的要求,
    ChannelProxy
    可能必须提供自己的
    LoadingStrategy

  • 因此,在Decorator中,您需要与通道(或ChannelProx)中相同的getter和setter,但是否将它们转发到通道实例?(除了那些你想懒洋洋的)。是的。我看到弗雷德里克给了你所需要的指导;-)我以为你是在代理中这样做的,因为代理或多或少是一种装饰器。所以在装饰器中,你需要与通道(或ChannelProx)中相同的getter和setter,但要将它们转发到通道实例吗?(除了那些你想懒洋洋的)。是的。我看到弗雷德里克给了你所需要的指导;-)我以为你是在代理中这样做的,因为代理或多或少是一种装饰器。事实上,我在一个.NET项目的例子中看到了这一点。我将尝试这两种方法,看看什么更适合我。事实上,我在一个.NET项目的例子中看到了这一点。我将尝试这两种方法,看看什么更适合我。谢谢。