【大话设计模式】策略模式
策略模式定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。
策略模式是一种定义一系列算法的方法,从概念上看,这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。
策略模式的Strategy类层次为Context定义了一系列可供重用的算法或行为。继承有助于析取出这些算法中的公共功能。
策略模式简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。
【Strategy类】定义所有支持算法的公共接口
interface class Strategy:void AlgorithmInterface();
【ConcreteStrategy】封装了具体的算法或行为,继承于Strategy
class ConcreteStrategyA : Strategy override void AlgorithmInterface():算法A实现
class ConcreteStrategyB : Strategy override void AlgorithmInterface():算法B实现
class ConcreteStrategyC : Strategy override void AlgorithmInterface():算法C实现
【Context】用一个ConcreteStrategy来配置,维护一个对Strategy对象的引用。
class Context :Strategy strategy;public Context(Strategy strategy)this.strategy = strategy;public void ContextInterface()strategy.AlgorithmInterface();
客户端代码:
static void Main(String[]args)Context context;context = new Context(new ConcreteStrategyA());context.ContextInterface();context = new Context(new ConcreteStrategyB());context.ContextInterface();context = new Context(new ConcreteStrategyC());context.ContextInterface();
由于实例化不同,调用算法也不同。
当不同的行为堆砌在一个类中时,就很难避免使用条件语句来选择合适的行为。
将这些行为封装在一个个独立的Strategy 的类中,可以在使用这些行为的类中消除条件语句。
策略模式封装了变化。在实践中,可以封装几乎任何类型的规则,只要在分析过程中需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。
而策略模式与简单工厂模式结合后,选择具体实现的职责可以由Context来承担,这就最大化地减轻了客户端的职责。
【策略模式和简单工厂结合】
class Context :Strategy strategy;public Context(string type):switch(type):case "A": strategy = new ConcreteStrategyA();break;case "B":strategy = new ConcreteStrategyA();break;case "C":strategy = new ConcreteStrategyA();break;public void ContextInterface()strategy.AlgorithmInterface();
简单工厂的应用:将实例化具体策略的过程由客户端转移到Context类中。
客户端:
Context context;context = new Context("A");
context.ContextInterface();context = new Context("B");
context.ContextInterface();context = new Context("C");
context.ContextInterface();
【大话设计模式】策略模式相关推荐
- 大话设计模式—策略模式
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式. 大话设计模式中程杰老师给出的定义是这样的:策略模式(Strategy),定义 ...
- 大话设计模式——策略模式
1)商场收银系统 import java.awt.event.ActionEvent; import java.awt.event.ActionListener;import javax.swing. ...
- 大话设计模式-策略模式与简单工厂模式
来源:http://blog.csdn.net/wulingmin21/article/details/6712684 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策 ...
- 大话设计模式策略模式_多种方法实现商场促销
V1.0面向过程设计思想 V1.1 添加计费方式下拉框,发现程序不容易维护,不容易扩展,更不容易复用 采用面向对象的设计思想 V2.0面向对象+简单工厂 缺点是每次维护或扩展收费方式都要改动这个工厂, ...
- linkin大话设计模式--常用模式总结
linkin大话设计模式--常用模式总结 一,常用设计模式定义 Abstract Factory(抽象工厂模式):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. Adapter( ...
- Python设计模式-策略模式
Python设计模式-策略模式 代码基于3.5.2,代码如下; #coding:utf-8 #策略模式class sendInterface():def send(self,value):raise ...
- 关于设计模式——策略模式-Strategy Pattern
文章目录 1 策略模式 1.1 模拟鸭子 1.2 设计原则 1.3 整合行为 1.4 模拟鸭子代码的代码 1.5 动态设定行为 1.6 重新查看整体 1.7 继承和组合 1.8 总结 1.9 优劣期间 ...
- [设计模式] ------ 策略模式
策略模式 它定义了算法家族,分别封装起来,让他们直接可以互相替换,此模式让算法的变化,不会影响到使用算法的客户 其实很简单,可能很多人都用到了,只不过还不知道这就是策略模式而已. 比如定义一个接口A, ...
- java 策略模式 促销_java设计模式——策略模式
一. 定义与类型 定义:针对一组算法,将每一种算法都封装到具有共同接口的独立的类中,从而是它们可以相互替换.策略模式的最大特点是使得算法可以在不影响客户端的情况下发生变化,从而改变不同的功能.当代码中 ...
- Springboot 使用设计模式- 策略模式
前言 直白点,什么场景我们需要使用到设计模式- 策略模式. 在平常的springboot项目里面做CRUD,我们的习惯性基本是 一个mapper,一个service,一个serviceImpl. 但是 ...
最新文章
- 3月最新!2021中国内地大学ESI排名出炉:333所高校入榜全球前1%
- 构建Docker镜像(三)
- Oracle从零开始04——SQL语句03——单行函数
- 【工作笔记】ElasticSearch —— 常用插件/工具汇总
- Java微服务篇4——Elastic search
- elementUI 分页组件的使用 - 踩坑篇
- Linux-0.11内核学习-添加系统调用
- Windows Azure AppFabric 入门教学(七):多播(Multicast)
- 飞思卡尔单片机学习记录(一)
- 信号与系统实验三 信号的卷积计算
- java rtf_Java中存取Rtf文件 | 学步园
- PS给证件照换背景颜色
- 超低功耗高性能2.4GHz GFSK 无线收发芯片Si24R1替代NRF24L01P
- 中国草坪和花园设备市场现状研究分析与发展前景预测报告(2022)
- Tensorflow2.0使用CNN和爬虫做新闻分类
- rpiplay实现树莓派AirPlay投屏器
- AngularJS之有序列表
- 奥运排行榜详解 (25分
- 博客(blog.m1kh.com)
- Ubuntu18 的超详细常用软件安装
热门文章
- 如何使用远程桌面连接远程计算机?
- 如何获取京东推广的APPKEY
- 堆漏洞挖掘——fastbin attack漏洞
- 如何解压tar.gz文件或是.gz文件
- 河南省计算机考试题目,河南省事业单位工勤技能考试试题(计算机信息处理)
- 百度站长俱乐部SEO提问收集-2
- 统计聚类法的基本步骤:
- mysql服务器默认使用用户_在Windows下配置MySql服务器默认使用的用户是
- IOT物联网商业源码完整版下载附搭建教程
- 欧莱雅进博会展示口红打印机、超节水洗发产品;霍尼韦尔进博会签约顺丰集团、博腾股份 | 美通社头条...