002策略模式

策略模式

策略模式是将同种类变化抽象为一个策略接口, 之后派生出多种实现的一个模式

  • 根据传入的策略实体不同 实现的功能也不同
  • 客户端需要知道所有的策略类以便选择(需要显示New)

    UML

UML

UMLClassCode

interface IStrategy{
object GetResult();
}
class AStrategy{
+object GetResult();
}
class BStrategy{
+object GetResult();
}
class Content{
+IStrategy strategy
+Content(IStategy)
+object GetResult();
}
IStrategy <|.. AStrategy
IStrategy <|.. BStrategy
IStrategy <--o Content

Code

public static void Main()
{
    Content content = new Content(new AStrategy());
    Console.WriteLine(content.GetResult());
    Console.ReadKey();
}
public interface IStrategy
{
    object GetResult();
}
public class AStrategy : IStrategy
{
    public object GetResult()
    {
        return "inA";
    }
}
public class BStrategy : IStrategy
{
    public object GetResult()
    {
        return "inB";
    }
}
public class Content
{
    public IStrategy strategy;
    public Content(IStrategy stategy)
    {
        this.strategy = stategy;
    }
    public object GetResult()
    {
        return strategy.GetResult();
    }
}

掺杂了简单工厂的策略模式

通过简单工厂封装生成策略类的过程, 进一步解耦合

只将Content类的构造函数变化一下.

 public Content(StrategyType type)
{
    switch (type)
    {
        case StrategyType.A:
            strategy = new AStrategy();
            break;
        case StrategyType.B:
            strategy = new BStrategy();
            break;
        default:
            break;
    }
}

当然, 要添加一个enum

public enum StrategyType
{
    A,
    B
}