哪种设计模式适合 - 策略有意义?

时间:2010-12-27 09:40:43

标签: design-patterns

我有一个简单的数据库表,用于存储通过电子邮件订阅文件夹或显示在网站上的用户列表(仅在Web UI上)。在存储表中,这由一个数字控制(1 - 通过电子邮件在网站2上显示)。当我在UI中显示时,我需要在用户订阅的每个文件夹旁边显示一个复选框(电子邮件和现场)。

有一个单独的表存储一组默认订阅,如果用户没有表达他的订阅,这些订阅将适用于每个用户。这基本上是文件夹ID和虚拟组名。

但是,电子邮件订阅不计算应用这些默认组。因此,如果没有“现场”订阅应用默认组。这就是规则。

这里的策略模式如何(伪代码)

Interface ISubscription
  public ArrayList GetSubscriptionData(Pass query object)

Public class SubscriptionWithDefaultGroup
  Implement ArrayList GetSubscriptionData(Pass query object)

Public class SubscriptionWithoutDefaultGroup
  Implement ArrayList GetSubscriptionData(Pass query object)

Public class SubscriptionOnlyDefaultGroup
  Implement ArrayList GetSubscriptionData(Pass query object)

这甚至有意义吗?我很乐意接受任何批评/帮助/笔记。我正在学习。

干杯

1 个答案:

答案 0 :(得分:2)

下面怎么样。我的选择是使用Decorator模式。顺便说一句,我理解你的问题,总是有默认订阅,用户可以额外订阅更多。 装饰器适用于此类 ENHANCEMENTS ,而策略适用于替代实施

Interface ISubscription
{
  public List<ISubscription> GetSubscriptions(Pass query object);
}

Public class DefaultSubscritions implements ISubscription {...}

Public class SubscribedSubscritions implements ISubscription 
{
   private ISubscription sub;

   public class SubscribedSubscritions(ISubscription in)
   {
     sub=in;
   }

   public List<ISubscription> GetSubscriptions(Pass query object) 
   {
     List<ISubscription> defaultSubs=sub.GetSubscriptions(...);
     List<ISubscription> additionalSubs=//retrieve the subscribed ones


     List<ISubscription> allSubs=//defaultSubs + additionalSubs

     return allSubs;
   }
}

策略允许您使用替代实现替换某些内容。装饰器透明地增强了对象。