【发布时间】:2013-12-12 04:20:47
【问题描述】:
我想在 C++ 中实现策略模式,但我有疑问。 Alwyas 策略模式示例比遵循代码(在 C# 中)。我想修改客户端,即 MainClass,以便选择具体的策略将是动态的方式。 例如,通过 main 方法的 args[] 参数传递策略名称。我将如何在不修改此模式的属性的情况下实现这一点?。
namespace StrategyPatterns
{
// Interface definition for a Sort algorithm
public interface ISort
{
void Sort(List<string> list)
}
// QuickSort implementation
public class CQuickSorter : ISort
{
void Sort(List<string> list)
{
// Here will come the actual imp
}
}
// BubbleSort
public class CBubbleSort : ISort
{
void Sort(List<string> list)
{
// The actual imp of the sort
}
}
public class Context
{
private ISort sorter;
public Context(ISort sorter)
{
// We pass the context the strategy to use
this.sorter = sorter;
}
public ISort Sorter
{
get{return sorter;)
}
}
public class MainClass
{
static void Main()
{
List<string> myList = new List<string>();
myList.Add("Hello world");
myList.Add("Another item");
Contexto cn = new Contexto(new CQuickSorter());
cn.Sorter.Sort(myList);
cn = new Contexto(new CBubbleSort());
cn.Sorter.Sort(myList);
}
}
}
【问题讨论】:
-
这应该是哪种语言?至少 1 个拼写错误和几个语法错误.. 看起来更像 C#?
-
正如@KarthikT 回答的那样,您不能直接从 C++ 中的字符串执行此操作,他的回答是一种方法。 “依赖注入”可能是一个很好的搜索词,可以看到以各种方式(包括一些动态的)做这类事情的框架。
标签: c++ design-patterns