策略者模式

场景:

你想买一盏台灯,现在有很多类型的台灯,分别为:红色的 绿色的,大的 小的等等。你可以选择其中的某一种。

现在出现了新的产品智能调节的台灯,那么我们应该怎么办呢?

把台灯能够调节的行为加到父类中?显然这是不合适的,因为这样会让别的灯也具有调节功能。那么现在我们可以使用接口添加调节功能,让有些灯能够进行调节而其他的却不能

现在又出现了各种方式的调节功能,我们可以实现调节的接口,那么我们怎样去动态选择不同方式的调节呢?可以通过调用接口来调用不同的调节方法

现在看来每个具体的灯如果具有调节功能都必须要实现调节接口,这样会造成再出现新的可以调节的灯时就要实现调节接口,随着灯的类型越来越多,这样将成为一个噩梦。

那么我们怎样去改正呢?好的设计就是把抽象的阶层设计好,当出现新的东西的时候,不改变原有的代码,而是增加新的东西(开闭原则)。

把AdjustInter放在Lamp抽象类中,去用AdjustInter提供的方法,同时可以随意选择调节的方式

由于Lamp与AdjustInter之间是关联关系,所以应该在Lamp抽象类中采用声明属性的方式,来放在抽象类Lamp中,声明adjust()方法使用调节功能,同时使用setAdjustInter(AdjustInter adjustInter)来选择不同的调节方式。

通过上面我们就可以知道,调节接口拥有一系列的调节方式,能够提供给使用者即Lamp使用,同时也能够随时选择替换不同的调节方式。这就是策略者模式,即:通过提供一个拥有一系列策略的接口,使 使用者能够使用并且可以随时进行策略的选择替换。

 

这里我们看到每次我们需要更改调节方式都是通过setAdjustInter(AdjustInter adjustInter),这就要求我们知道所有的策略。这也是策略者模式的缺点使用者必须知道所有的策略

优点就是:动态改变策略

时间: 2024-10-09 23:42:38

策略者模式的相关文章

C#设计模式(20)——策略者模式(Stragety Pattern)

一.引言 前面主题介绍的状态模式是对某个对象状态的抽象,而本文要介绍的策略模式也就是对策略进行抽象,策略的意思就是方法,所以也就是对方法的抽象,下面具体分享下我对策略模式的理解. 二.策略者模式介绍 2.1 策略模式的定义 在现实生活中,策略模式的例子也非常常见,例如,中国的所得税,分为企业所得税.外商投资企业或外商企业所得税和个人所得税,针对于这3种所得税,针对每种,所计算的方式不同,个人所得税有个人所得税的计算方式,而企业所得税有其对应计算方式.如果不采用策略模式来实现这样一个需求的话,可能

20.设计模式_策略者模式

一.引言 前面主题介绍的状态模式是对某个对象状态的抽象,而本文要介绍的策略模式也就是对策略进行抽象,策略的意思就是方法,所以也就是对方法的抽象,下面具体分享下我对策略模式的理解. 二.策略者模式介绍 2.1 策略模式的定义 在现实生活中,策略模式的例子也非常常见,例如,中国的所得税,分为企业所得税.外商投资企业或外商企业所得税和个人所得税,针对于这3种所得税,针对每种,所计算的方式不同,个人所得税有个人所得税的计算方式,而企业所得税有其对应计算方式.如果不采用策略模式来实现这样一个需求的话,可能

C++设计模式实现--策略(Strategy)模式

一. 举例说明 以前做了一个程序,程序的功能是评价几种加密算法时间,程序的使用操作不怎么变,变的是选用各种算法. 结构如下: Algorithm:抽象类,提供算法的公共接口. RSA_Algorithm:具体的RSA算法. DES_Algorithm:具体的DES算法. BASE64_Algorithm:具体的Base64算法. 在使用过程中,我只需要对外公布Algorithm_Context这个类及接口即可. 代码实现: [cpp] view plaincopy //策略类 class Alg

设计模式系列二(策略者模式)

浑浑噩噩的过的漫无目的,更多的是迷茫,真不知该如何定位自己的人生?空有远大抱负,而又力不从心!有句话说的好,当你的才能撑不起你的野心的时候,就该静下来心来好好学习了!于是闲来无事,便继续开始我的设计模式之游!今天便研究下策略者模式! 1.策略者模式解析 大话设计模式是这样讲道: 策略者模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法减少各种算法类与使用算法类之间的耦合[DPE]. 个人理解:所谓一系列算法方法就是一系列

设计模式-策略者模式

一.定义 策略模式是针对一组算法,将每个算法封装到具有公共接口的独立的类中,从而使它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 二.UML类图 三.例子展示 namespace 策略者模式 { public interface ITaxStrategy { double GetTax(double money); } public class PersnalStrategy : ITaxStrategy { public double GetTax(double mo

Java 实现策略(Strategy)模式

策略模式:行为型模式 将同一行为,不同的处理算法分别封装起来.让它们之间能够互相替换 1. 定义一个超类型接口,及 行为方法 2. 定义不同的实现类,实现该行为的 不同的算法 /** * 策略模式:针对同一命令(或行为),不同的策略做不同的动作 * 商品促销 * 本类为:收取现金的类 * * @author stone */ public interface ICashSuper { double acceptCash(double money); } /** * 正常收取现金 * @autho

【C#设计模式-策略者模式】

一.策略者模式定义: 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化. 二. 策略者模式的组成: 抽象策略角色: 策略类,通常由一个接口或者抽象类实现. 具体策略角色:包装了相关的算法和行为. 环境角色:持有一个策略类的引用,最终给客户端调用. 三.策略者模式的实现: 在现实生活中,针对员工的收入情况,会收取个人所得税,公司所得税等等,针对这些所得税都有对于的算法进行计算,如果不采用策略模式,可能会建一个计算类,里面包含着

C#面向对象设计之——策略者模式(二十)

一.前言 策略模式定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. 二.结构图 三.实例代码 using System; using System.Collections.Generic; using System.Text; namespace 策略模式 { class Program { static void Main(string[] args) { Context context; context = new Context(new

C#设计模式-策略者模式(Strategy)

策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开,委派给不同的对象管理.策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类.用一句话来说,就是:"准备一组算法,并将每一个算法封装起来,使得它们可以互换." 模式涉及到三个角色: 1.环境(Context)角色:持有一个Strategy类的引用.