策略模式理论概念引出

简介: 一、经典案例 设计一个商店收银系统。完成最基本的商品买卖收费统计问题。能解决各个商品正常情况下的收费处理\打折情况下的收费处理\返利情况下的收费处理。 图 UML图 抽象策略基类 点击(此处)折叠或打开namespace StrategyPatte...

一、经典案例


设计一个商店收银系统。完成最基本的商品买卖收费统计问题。能解决各个商品正常情况下的收费处理\打折情况下的收费处理\返利情况下的收费处理。


image

图 UML图

抽象策略基类

点击(此处)折叠或打开

  1. namespace StrategyPattern
  2. {
  3.     /* 注意抽象类的写法 */
  4.     abstract class Strategy
  5.     {
  6.         abstract public void ArithmeticInterface();
  7.     }
  8. }

三个派生类,继承相同的公共方法进行不同的实现。

点击(此处)折叠或打开

  1. namespace StrategyPattern
  2. {
  3.     class ConcreteStrategyA : Strategy
  4.     {
  5.         public override void ArithmeticInterface()
  6.         {
  7.             Console.WriteLine("Operate in ConcreteStategyA");
  8.             //throw new NotImplementedException();
  9.         }
  10.     }
  11. }


点击(此处)折叠或打开

  1. namespace StrategyPattern
  2. {
  3.     class ConcreteStrategyB : Strategy
  4.     {
  5.         public override void ArithmeticInterface()
  6.         {
  7.             Console.WriteLine("Operate in ConcreteStrategyB");
  8.             //throw new NotImplementedException();
  9.         }
  10.     }
  11. }


点击(此处)折叠或打开

  1. namespace StrategyPattern
  2. {
  3.     class ConcreteStrategyC : Strategy
  4.     {
  5.         public override void ArithmeticInterface()
  6.         {
  7.             Console.WriteLine("Operate in ConcreteStrategyC");
  8.             //throw new NotImplementedException();
  9.         }
  10.     }
  11. }

 

关键步骤,通过策略上下文类来调用各个派生类的实例!

点击(此处)折叠或打开

  1. namespace StrategyPattern
  2. {
  3.     class StrategyContext
  4.     {
  5.         public Strategy strategy;

  6.         public StrategyContext(Strategy strategy)
  7.         {
  8.             this.strategy = strategy;
  9.         }

  10.         public void Invoke()
  11.         {
  12.             this.strategy.ArithmeticInterface();
  13.         }
  14.     }
  15. }


点击(此处)折叠或打开

  1. namespace StrategyPattern
  2. {
  3.     class Program
  4.     {
  5.         static void Main(string[] args)
  6.         {
  7.             StrategyContext strategyContext;

  8.             strategyContext = new StrategyContext(new ConcreteStrategyA());
  9.             strategyContext.Invoke();
  10.             strategyContext = new StrategyContext(new ConcreteStrategyB());
  11.             strategyContext.Invoke();
  12.             strategyContext = new StrategyContext(new ConcreteStrategyC());
  13.             strategyContext.Invoke();

  14.             Console.ReadLine();
  15.         }
  16.     }
  17. }


image


zip.gif StrategyPattern.zip  

zip.gif 策略模式原始案例.zip  

 

二、策略模式的理论引出 


1、策略模式的概念

策略模式是一种定义一系列算法的的方法,这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了了各种算法类与使用算法类之间的耦合。


2、策略模式的优点

上面案例中,策略模式的Strategy类层次为StrategyContext定义了一系列的可供重用的算法或行为。继承有助于取出这些算法的中的公共功能。

另外,策略模式简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。

算法类间相对独立,修改其中任一个不会影响其他的算法。


3、策略模式的用途

策略模式就是用来封闭算法的,在实践中可以用它来封装几乎任何类型的的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可考虑使用策略模式处理这种变化的可能性。


三、参考文献

《大话设计模式》.程杰著

相关文章
|
存储 前端开发 索引
【面试题】数组去重的五种方法(必会)
【面试题】数组去重的五种方法(必会)
343 1
|
8月前
|
机器学习/深度学习 人工智能 测试技术
仅7B的模型数学推理能力完虐70B?MIT哈佛推出行动思维链COAT让LLM实现自我反思并探索新策略
Satori 是由 MIT 和哈佛大学等机构联合推出的 7B 参数大型语言模型,专注于提升推理能力,具备强大的自回归搜索和自我纠错功能。
256 6
仅7B的模型数学推理能力完虐70B?MIT哈佛推出行动思维链COAT让LLM实现自我反思并探索新策略
|
机器学习/深度学习 监控 项目管理
『软件工程4』一文了解软件项目管理中的4P
该文章讲述了软件项目管理中的四个关键要素(4P:People、Product、Process、Project)的重要性及如何在实践中应用这些要素来提高项目管理的有效性。
『软件工程4』一文了解软件项目管理中的4P
|
SQL 数据管理 关系型数据库
数据管理DMS产品使用合集之如何设置SQL执行的超时时间
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
160 1
|
计算机视觉 索引
02 OpenCV图像通道处理
在数字图像处理中,图像通道是指一个图像中的颜色信息被分离为不同的颜色分量。常见的图像通道包括RGB通道、灰度通道、HSV通道等。 RGB通道是指将图像分离为红色、绿色和蓝色三个颜色通道,每个通道表示相应颜色的亮度。这种方式是最常见的方式,它对于彩色图像的处理非常重要。
|
JavaScript
🎉SolidJS响应式原理和简易实现🎉
🎉SolidJS响应式原理和简易实现🎉
|
关系型数据库 MySQL 数据库
深入探析MySQL中的隔离性级别:保障数据一致性的关键
在关系型数据库中,隔离性是事务特性中的一个重要方面。它确保了在多个并发事务同时操作数据库时,各个事务之间的操作不会相互干扰,从而保障了数据的一致性和正确性。MySQL作为一款广泛使用的关系型数据库,提供了多种隔离性级别供开发者选择。本文将深入探讨MySQL中的隔离性级别,介绍不同级别的特点、用途以及可能的问题。
586 0
|
小程序 JavaScript Python
微信小程序|上下滚动页面实现
微信小程序|上下滚动页面实现
1006 0
|
存储 算法 计算机视觉
【项目实践】从零开始学习Deep SORT+YOLO V3进行多目标跟踪(附注释项目代码)(二)
【项目实践】从零开始学习Deep SORT+YOLO V3进行多目标跟踪(附注释项目代码)(二)
418 0
|
关系型数据库 MySQL Linux
linux debian系统使用mysql教程
linux debian系统使用mysql教程
739 0
linux debian系统使用mysql教程