如何为每个策略制作不同的界面?

时间:2014-05-25 09:28:36

标签: ruby-on-rails design-patterns strategy-pattern

我有以下情况。

我进行广告轮播,我希望有一些策略。但是,当不同的策略需要不同的参数时,如何做到这一点?

例如:

LeastShowedStrategy只需要收集广告

UserRelevantStrategy需要广告收集和用户

有什么方法可以清理,还是应该放弃使用策略模式?

更新: 我写道,有几行代码。我不知道,当每种策略都有不同的需求时,如何对策略进行参数化。

class MyEngine::AdsHelper
    def get_ad
        ads = get_all_possible
        Engine.strategy.get_next(ads)
    end
end

class MyEngine::Engine
    attr_accessor :strategy
end

初​​始化:

MyEngine::Engine.strategy = MyEngine::Strategies::ConcreteStrategy.new 

1 个答案:

答案 0 :(得分:0)

鉴于Strategy Pattern基于使用具有多个具体实现的单个接口,我不太确定您在此处尝试完成的任务。我最初提供的信息是,您的需求与战略模式并不完全匹配,但需要了解更多关于您实际想要提供的替代方案的信息。

策略模式概述​​伪代码

interface ITaxStrategy:
    decimal CalculateTax (decimal Subtotal)

public class NYTaxStrategy : ITaxStrategy

    CalculateTax(decimal Subtotal)
    {
       return Subtotal * 0.08125;
    }

public class UKTaxStrategy: ITaxStrategy

    CalculateTax(decimal Subtotal)
    {
       return (Subtotal * 0.825) + VAT;
    }

以上允许您使用构建器,工厂,DI Framework或类似机制将任何特定的 TaxStrategy 实现注入需要它的对象,但需要一致的接口/抽象类来定义策略契约

希望有帮助...