定义
- 定义一系列相同算法的方法
- 将一系列完成相同工作的不同组织起来,用相同的方法调用全部的方法
- 可以以相同的方式调用所有算法,减少各种算法类与使用算法类之间的耦合
核心
- 组织同类型方法
- 创建基类实例,统一方法调用基类方法
如何使用
- 有一个需求,需要以不同的方式 A B C 完成。创建基类Super,需要实现方法Method,子类A B C ,都需要实现方法
- 创建上下文类 SuperContext,完成两件事,创建实例,创建一个方法调用方法Method
- 创建上下文 SuperContext 实例,调用统一方法Method
abstract Super
{
abstract void Method();
}
class A:Super
{
public void Method(){}
}
class B:Super
{
public void Method(){}
}
class SuperContext
{
private Super su;
//策略,实现基类实例
public SuperContext(Super super)
{
su = super;
}
//策略 + 简单工厂
public SuperContext(int index)
{
switch(index)
{
case 1:
su = new A();
break;
case 2:
su = new B();
break;
}
}
//公共调用方法
public void GetMethod()
{
su.Method();
}
}
void Main()
{
SuperContext sc = new SuperContext(1);
sc.GetMethod();
SuperContext sc = new SuperContext(2);
sc.GetMethod();
}使用场景
存在多种同系列的算法,用统一的方法去调用
策略模式与工厂模式的比较
- 工厂模式是将一系列方法组织到一起,然后提供一个方法去返回这些方法的实例,供外部调用实例的方法。
- 策略模式是将一系列方法组织在一起,然后提供上下文对象,不返回这些方法的实例,而是实现实例。
- 然后通过一个方法,去调用这系列的方法,然后该方法供外部调用
策略 + 简单工厂
- 策略模式缺少需要调用哪一个基类方法的判断,这部分判断需要调用者自己去判断。
- 而简单工厂是通过判断传参,来创建不同基类的实例,调用者只用传参,不用自己判断。
- 所以将策略模式的上下文构造改为参数判断,通过判断来实例,减少了调用者判断的麻烦