我正在尝试实施strategy pattern.这是我实施的一部分:
public List<string> GetOrderedEmployeeNames(IOrderByStrategy strategy)
{
return GetEmployeeFullNames().OrderBy(strategy.Order);
}
现在每次我调用这个函数我都要写:
var employees = GetOrderedEmployeeNames(new OrderByFamilyName());
每次正确的方式是“新手”策略还是我不正确地实施这个策略?
答案 0 :(得分:7)
如果实现IOrderByStrategy
的类没有任何状态(即每次都表现相同),那么你也可以将它存储在某个地方,以节省重新new
它
那就是说,new
是一个非常有效的操作,如果你没有在一个紧凑的循环中调用它,那么继续做你正在做的事情可能会更简单。
答案 1 :(得分:3)
不一定,虽然它可能不会伤害创建对象的任何东西,因为我假设它们主要是方法并且不包含大量数据。
一些替代方案:
StrategyFactory
创建新实例或保存对flyweights的引用(由某个键索引的小对象,如字符串)答案 2 :(得分:1)
如果策略具有相同的行为,您可以存储属性。如果没有,您可以使用参数创建对象。
private IOrderByStrategy orderByStrategy;
public IOrderByStrategy OrderByStrategy
{
get
{
if(orderByStrategy != null)
return orderByStrategy;
else
return new OrderByStrategy();
}
}
var employees = GetOrderedEmployeeNames(OrderByStrategy);
第二种情况:
var employees = GetOrderedEmployeeNames(new OrderByFamilyName("familyname","DESC"));