策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。(原文: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.

欢迎拍砖.

转载于:https://www.cnblogs.com/springyangwc/archive/2011/04/02/2002809.html

步步为营 .NET 设计模式学习笔记 三、Strategy(策略模式)相关推荐

  1. 设计模式学习笔记三——Abstract Factory模式

    动机:实现一系列相互依赖对象的创建,通过封装系列对象创建来隔离对象创建和客户程序,从而能够灵活提供更多系列对象创建和系列对象间的切换,而不需要改变客户程序. 应用:多种风格软件界面控件的创建.对应多种 ...

  2. 步步为营 .NET 设计模式学习笔记系列总结

    设计模式我从开篇到23种设计模式的讲解总共花了进两个月的时间,其间有很多读者给我提出了很好的建议,同时也指出了我的不足,对此我表示感谢,正是由于很多读者的支持我才能坚持的写到最后.在此表示我真诚的谢意 ...

  3. 设计模式学习笔记——享元(Flyweight)模式

    设计模式学习笔记--享元(Flyweight)模式 @(设计模式)[设计模式, 享元模式, flyweight] 设计模式学习笔记享元Flyweight模式 基本介绍 享元案例 类图 实现代码 Big ...

  4. 设计模式学习笔记——中介者(Mediator)模式

    设计模式学习笔记--中介者(Mediator)模式 @(设计模式)[设计模式, 中介者模式, Mediator] 设计模式学习笔记中介者Mediator模式 基本介绍 中介者案例 类图 实现代码 Me ...

  5. 设计模式学习笔记——单例(Singleton)模式

    设计模式学习笔记--单例(Singleton)模式 @(设计模式)[设计模式, 单例模式, Singleton, 懒汉式, 饿汉式] 设计模式学习笔记单例Singleton模式 基本介绍 单例案例 类 ...

  6. 步步为营 .NET 设计模式学习笔记 一、开篇(设计模式之泡妞二十三招)

    园子里讲设计模式的太多了,最近我也在学设计模式,把我自己练的一些代码整理下,写个.NET设计模式学习笔记来让自己在设计模式的功底更深一层. 记得金庸小说里风清扬教令狐冲的时候,说过独孤九剑的总纲,无招 ...

  7. 设计模式学习笔记--Mediator 中介者模式

    我们知道面向对象应用程序是由一组为了提供某种服务而彼此交互的对象组成.当彼此引用的对象数量比较少时,此时对象之间就为直接交互(点对点).而当对象的数量增加时,这种直接交互会导致对象之间复杂的.混乱的引 ...

  8. 设计模式学习笔记--Flyweight享元模式

    Flyweight模式也叫享元模式,是由GoF提出的23种设计模式中的一种.Flyweight模式是构造型模式之一,它通过与其他类似对象共享数据来减小内存占用,所以叫享元.   此模式解决的是由于大量 ...

  9. 设计模式学习笔记--享元(Flyweight)模式

    写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方案,这就是软件模式:每一个模式描述了一个在我们程序设计中经常发生的问题,以及该问题的解决方案:当我们碰到模式 ...

最新文章

  1. CSS3 animation-timing-function steps()
  2. linux内核中的数据结构
  3. 51. N 皇后(回溯算法)
  4. php-ml案例,AppML 案例原型
  5. MySQL基本的SELECT语句,SQL语言概述,基础和重要不冲突,完整详细可收藏
  6. java string... 参数_Java String.Format() 方法及参数说明
  7. 万万没想到!ModelArts与AppCube组CP了
  8. sqlyong导出sql没有数据_sqlyog怎么导入外部数据库-sqlyog导入数据库的方法 - 河东软件园...
  9. 4后期盒子叫什么_考研:什么叫跨考专业?跨考专业的4大原因和存在3个方面的困难...
  10. Bailian4144 畜栏保留问题【贪心】
  11. 周二强新概念c语言答案,新编C语言程序设计(周二强版)课后习题练习4答案
  12. 安装MATLAB(已经下载安装包)
  13. SQL Server2008安装详细教程
  14. 泰迪杯数据挖掘挑战赛—机器学习(一)
  15. 【渝粤题库】国家开放大学2021春2251团体工作题目
  16. [日志]中国十大名花
  17. springboot整合jpa之Specification
  18. 一个小白的自渡-Git 仓库基础操作
  19. Linux下的Cadence软件的spice和Verliog步骤(这是最最最为简单的超详细!!!!)
  20. 一文搞定计算机网络面试题

热门文章

  1. 服务器link系统命令,可以使用命令(7)来查看网络接口的运行情况。输入该命令后,系统的输出信息如下。...
  2. json解析 spark_PySpark算子处理空间数据全解析(8):构造空间数据的RDD(2)
  3. python怎么找一个矩阵_Python(NumPy,SciPy),找到矩阵的零空间
  4. exp参数feedback_Oracle数据库逻辑增量备份恢复之exp/imp参数inctype
  5. 华为鸿蒙新机价格表,华为Mate30已确认:鸿蒙系统+巴龙5000,售价感人
  6. 显卡bind 驱动 linux,Linux 配置bind 服務
  7. 李少华 linux内核,腾讯云CMQ消息队列在Linux环境下的使用
  8. php目录隔离,PHP 应用隔离的几种方法
  9. 合肥信息技术职业学院计算机模拟考试准考证,【通知】全国计算机等级考试模拟测试通知...
  10. php 复选框 未选,php – 在表单发布时如何获取复选框元素中未选中复选框的值?...