gpt4 book ai didi

c++ - 策略模式 C++

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:28:52 25 4
gpt4 key购买 nike

我想用 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);
}
}
}

最佳答案

我们在 C++ 中没有反射,这是你需要让它正常工作的概念。我能想到的替代方案是创建一个工厂方法,如下所示。

ISort* CreateSorter(SortType type)
{
switch (type){
case QUICK_SORT: return new CQuickSorter();
...
}
}

我使用 enum 来获得更清晰的代码,但您可以将其更改为字符串,只要您能够理解我的基本观点即可。

关于c++ - 策略模式 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15059004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com