zoukankan      html  css  js  c++  java
  • 步步为营 .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:
       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.

    欢迎拍砖.

  • 相关阅读:
    Tarjan在图论中的应用(三)——用Tarjan来求解2-SAT
    【CodeForces】CodeForcesRound594 Div1 解题报告
    JS面向对象组件(三)--面向对象中的常用属性和方法
    JS面向对象组件(二)--Javascript原型链
    JS面向对象组件(一) ---包装对象与原型链
    JS面向对象组件(六) -- 拖拽功能以及组件的延展
    面试题目
    webstorm安装破解版
    面试题整理
    Javascript模块化编程(三):require.js的用法 (转)
  • 原文地址:https://www.cnblogs.com/springyangwc/p/2002809.html
Copyright © 2011-2022 走看看