步步为营 .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(具体策略类):
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.
欢迎拍砖.
    http://u.huoban001.com/space.php
                    
                
                
            
        
浙公网安备 33010602011771号