当前位置:编程学习 > asp >>

步步为营 .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 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,