策略模式
[ Strategy ]
[ 行为型模式 ]
[
抽象策略角色 : 策略类 , 通常由一个接口或者抽象类实现。
具体策略角色 : 包装了相关的算法和行为。
环境角色 : 持有一个策略类的引用 , 最终给客户端调用。
]
策略模式定义了一系列的算法 , 并将每一个算法封装起来 , 而且使它们还可以相互替换 。策略模式让算法独立于使用它的客户而独立变化。
定义父类(接口)
子类继承父类(接口) , 实现继承的函数
定义 应用场景类(Context) , 在构造函数里 , 根据参数 , 父类引用不同的子类
应用场景类(Context) 定义一个函数 , 里面调用封装的实际函数
客户端程序只需要使用 Context 类 , 调用函数 , 不需要知道 到底是谁执行了什么
策略模式 跟 工厂模式 比较:
策略模式是行为型模式(封装一系列算法)
工厂模式是创建型模式(复杂对象的创建)
策略模式 跟 工厂模式比 , 能够让客户端更少的认识 "其他类"
如果这里用工厂模式 , 那么客户程序这边 就会放一些列的 业务逻辑 来 判断生成对象 , 应该把业务逻辑 和 界面逻辑分开
源码:
public abstract class Payment
{
public abstract void Payments();
}
public class PaymentA : Payment
{
public override void Payments()
{
Console.WriteLine("PaymentA");
}
}
public class PaymentB : Payment
{
public override void Payments()
{
Console.WriteLine("PaymentB");
}
}
public class Context
{
private Payment payment;
public Context(string str)
{
switch (str)
{
case "A":
payment = new PaymentA();
break;
case "B":
payment = new PaymentB();
break;
}
}
public void GetResult()
{
if (payment != null)
{
payment.Payments();
}
}
}
class Program
{
static void Main(string[] args)
{
//A , B 付款类型 , 或者是打折程度
Context context = new Context("B"); 这里只需修改 B
context.GetResult();
Console.ReadKey();
}
}