步步为营 .NET 设计模式学习笔记 三、Strategy(策略模式)
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.)
Context(应用场景):
1、需要使用ConcreteStrategy提供的算法。
2、 内部维护一个Strategy的实例。
3、 负责动态设置运行时Strategy具体的实现算法。
4、负责跟Strategy之间的交互和数据传递。
Strategy(抽象策略类):
1、 定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,Context使用这个接口调用不同的算法,一般使用接口或抽象类实现。
ConcreteStrategy(具体策略类):
2、 实现了Strategy定义的接口,提供具体的算法实现。
现在我以一个我们买电脑时电脑配置装机为示例做个Strategy模式:
先看个用例图:首先新建Computer.cs:
view sourceprint?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:
view sourceprint?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:
view sourceprint?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:
view sourceprint?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();
}
}
然后调用它:<
补充:Web开发 , ASP.Net ,