策略模式
【策略模式】:它定義了算法家族,分別封裝起來,讓它們之間可以相互替換,此模式讓算法的變化,不會影響到客戶代碼;
策略模式是一種定義一係列的算法的方法,從概念上來看,所有這些算法完成的是相同的工作,隻是實現不同,它可以以相同的方式調用所有的算法,減少了各種算法類與使用算法類之間的耦合。
換句話說,策略模式是用來封裝算法的。
【示例代碼】:
// 算法抽象基類;
using System;
abstract class Strategy
{
public abstract void AlgorithmInterface();
}
//實際實現算法A
class ConcreteStrategyA : Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine("算法A實現");
}
}
//實際實現算法B
class ConcreteStrategyB : Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine("算法B實現");
}
}
//實際實現算法C
class ConcreteStrategyC : Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine("算法C實現");
}
}
// Context 上下文,用一個ConcreteStrategy來配置,維護一個對Strategy對象的引用;
class Context
{
Strategy strategy;
public Context(Strategy strategy)
{
this.strategy = strategy;
}
//上下文接口;
public void ContextInterface()
{
strategy.AlgorithmInterface();
}
}
class APP
{
static void Main()
{
Context context;
context = new Context(new ConcreteStrategyA());
context.ContextInterface();
context = new Context(new ConcreteStrategyB());
context.ContextInterface();
context = new Context(new ConcreteStrategyC());
context.ContextInterface();
Console.Read();
}
}
實例:商場促銷
【實現代碼】
using System;
abstract class CashSuper
{
public abstract void AcceptCash();
}
class CashNormal:CashSuper
{
public override void AcceptCash()
{
Console.WriteLine("Sells Normal!");
}
}
class CashRebate:CashSuper
{
public override void AcceptCash()
{
Console.WriteLine("Rebate Selling!");
}
}
class CashReturn:CashSuper
{
public override void AcceptCash()
{
Console.WriteLine("Sells Return!");
}
}
class CashContext
{
private CashSuper cashSuper;
public CashContext(CashSuper cashSuper)
{
this.cashSuper=cashSuper;
}
public void GetResult()
{
cashSuper.AcceptCash();
}
}
class App
{
static void Main()
{
CashContext ch=new CashContext(new CashNormal());
ch.GetResult();
CashContext ch2=new CashContext(new CashRebate());
ch2.GetResult();
CashContext ch3=new CashContext(new CashReturn());
ch3.GetResult();
Console.Read();
}
}
最後更新:2017-04-02 03:42:38