我有以下情况。
我进行广告轮播,我希望有一些策略。但是,当不同的策略需要不同的参数时,如何做到这一点?
例如:
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
答案 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 实现注入需要它的对象,但需要一致的接口/抽象类来定义策略契约
希望有帮助...