名称:策略模式
说说:这件事情必须做,但具体怎么做目前还不确定,那就先留个接口,等确定时再做吧!
动机:
适用性:
参与者:
结果:定义了算法族,分别封装起来,让它们之间可以相互替换
类图:
说明:可以确定类有该行为,但又不能确定该行为的具体实现(存在多种实现/策略,如鸟类都有拍翅膀的行为,但有些可以飞起来,有些则不能),不防先给该行为预留一个接口,具体的选择哪个实现方式/策略,由具体的对象决定。
demo c#:
namespace strategyPattern
{
class Program
{
static void Main(string[] args)
{
context con = new context();
iStrategy strategy1 = new strategy1();
con.selectStrategy(strategy1);
con.doit();
iStrategy strategy2 = new strategy2();
con.selectStrategy(strategy2);
con.doit();
Console.Read();
}
}
// main code
interface iStrategy {
void handle();
}
class strategy1 : iStrategy {
public void handle() {
Console.WriteLine("now is using strategy1");
}
}
class strategy2 : iStrategy{
public void handle(){
Console.WriteLine("now is using strategy2");
}
}
class context {
iStrategy _strategy;
public void selectStrategy(iStrategy s){
this._strategy = s;
}
public void doit() {
this._strategy.handle();
}
public void doSthOther() { }
}
}