Context(应用场景):
1、需要使用ConcreteStrategy提供的算法。
2、 内部维护一个Strategy的实例。
3、 负责动态设置运行时Strategy具体的实现算法。
4、负责跟Strategy之间的交互和数据传递。
Strategy(抽象策略类):
1、 定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,Context使用这个接口调用不同的算法,一般使用接口或抽象类实现。
ConcreteStrategy(具体策略类):
2、 实现了Strategy定义的接口,提供具体的算法实现。
现在我以一个我们买电脑时电脑配置装机为示例做个Strategy模式:
首先新建Computer.cs:
public abstract class Computer
|
{
|
public abstract string MainBoard();
|
public abstract string Cpu();
|
public abstract string PhenoType();
|
public abstract string Memory();
|
public abstract string HardDisk();
|
public abstract string Display();
|
|
}
|
然后新建lenovo.cs:
public class lenovo:Computer
|
{
|
public override string MainBoard()
|
{
|
return "华硕880G系列" ;
|
}
|
public override string Cpu()
|
{
|
return "闪龙双核180(2.4GHz)" ;
|
}
|
public override string PhenoType()
|
{
|
return "集成高性能显卡" ;
|
}
|
public override string Memory()
|
{
|
return "1G DDRIII" ;
|
}
|
public override string HardDisk()
|
{
|
return "500G" ;
|
}
|
public override string Display()
|
{
|
return "19寸宽屏液晶显示器" ;
|
}
|
}
|
然后再建HP.cs:
public class HP:Computer
|
{
|
public override string MainBoard()
|
{
|
return "ATI RS482" ;
|
}
|
public override string Cpu()
|
{
|
return "速龙 64位 x2 双核5000+" ;
|
}
|
public override string PhenoType()
|
{
|
return "NV G310 512M" ;
|
}
|
public override string Memory()
|
{
|
return "2G DDR2 667 " ;
|
}
|
public override string HardDisk()
|
{
|
return "3200G" ;
|
}
|
public override string Display()
|
{
|
return "19寸宽屏液晶显示器" ;
|
}
|
}
|
然后再新建个买电脑的类BuyComputer.cs:
public class BuyComputer
|
{
|
private Computer _computer;
|
public BuyComputer(Computer computer)
|
{
|
_computer = computer;
|
}
|
public string ShowComputerConfigure()
|
{
|
StringBuilder strCom = new StringBuilder();
|
strCom.AppendLine( "你的电脑配置如下:" );
|
strCom.AppendLine( "主板是:" + _computer.MainBoard());
|
strCom.AppendLine( "处理器是:" + _computer.Cpu());
|
strCom.AppendLine( "显卡是:" + _computer.PhenoType());
|
strCom.AppendLine( "内存是:" + _computer.Memory());
|
strCom.AppendLine( "硬盘是:" + _computer.HardDisk());
|
strCom.AppendLine( "显示器是:" + _computer.Display());
|
strCom.AppendLine( "己组装完成" );
|
return strCom.ToString();
|
}
|
}
|
然后调用它:
public partial class Run : Form
|
{
|
public Run()
|
{
|
InitializeComponent();
|
}
|
private void btnRun_Click( object sender, EventArgs e)
|
{
|
BuyComputer myBuy = new BuyComputer( new lenovo());
|
rtbResult.AppendText(myBuy.ShowComputerConfigure());
|
myBuy = new BuyComputer( new HP());
|
rtbResult.AppendText(myBuy.ShowComputerConfigure());
|
}
|
}
|
运行结果如下:
你的电脑配置如下:
主板是:华硕880G系列
处理器是:闪龙双核180(2.4GHz)
显卡是:集成高性能显卡
内存是:1G DDRIII
硬盘是:500G
显示器是:19寸宽屏液晶显示器
己组装完成
你的电脑配置如下:
主板是:ATI RS482
处理器是:速龙 64位 x2 双核5000+
显卡是:NV G310 512M
内存是:2G DDR2 667
硬盘是:3200G
显示器是:19寸宽屏液晶显示器
己组装完成
总结:策略模式和抽象工厂模式很象,区别在于策略模式多了一个统一的接口类,这里是BuyComputer.
欢迎拍砖.