《大话设计模式》 --- 第二章 策略模式

面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。

策略模式:定义了算法,分别封装,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。

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

策略模式中普通算法的策略类为环境定义了一系列可供重用的算法或行为。继承有助于析出出这些算法中的公共功能。

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

当不同的行为堆砌在一个类中时,就很难避免使用条件语句来选择合适的行为。将这些行为封装在一个个独立的策略类中,可以在使用这些行为的类中消除条件语句。

策略模式用来封装算法,同样可以封装几乎任何类型的规则,只要在分析过程中,需要不同时间执行不同的运行方式,就可以考虑使用策略模式。

基本的策略模式中,选择怎么具体实现由客户端对象选择,并转给策略模式的策略对象。

任何需求的变更都需要成本。

阅读心得与反思:

UGUI 可以单独用一个空物体存放不同的脚本,脚本中有不同的方法,比如全部按钮可以调用其中一个脚本的方法,或者负责删除按钮的调用一个脚本中的方法,负责增加的调用一个脚本中的方法。

单独实现算法之前,仅需要知道执行了什么类型的算法。而继承的父策略对象存储了算法的公共因素。客户端只需要传递参数和执行方式进入服务器端的就可以。客户端与服务器端耦合度极小。

时间: 2024-10-21 20:59:45

《大话设计模式》 --- 第二章 策略模式的相关文章

大话设计模式第二章---商场促销简单工厂模式、策略模式 PHP实现及对比

简单工厂模式: <?php abstract class Cash_super { abstract public function accept_cash(float $money); } class Cash_normal extends Cash_super { public function accept_cash(float $money) { return $money; } } class Cash_rebate extends Cash_super { private $_mon

设计模式第二站--策略模式

从简单工厂模式出发,现在到达第二站:策略模式.那么什么是策略模式,它作为设计模式的第二站和第一站又有怎样的联系或者区别,它的理解和学习能否让我们用到和联系到第一站?怎么个关联法? 别急!下面我们就一起探究,康忙,北鼻! 一.什么是策略模式(Stragety)?          按照书本上的定义来说,策略模式定义了算法家族,分别封装起来,让它们之间可以互相替换:此模式让算法的变化,不会影响到使用算法的用户. 既然是定义都比较抽象,那么就先通过它的结构图来认识一下这个神秘的事物. 也许还是有些抽象

第二章 策略模式

策略模式封装了变化. 标准策略模式: /** * Created by hero on 16-3-29. */ public abstract class CashSuper { public abstract double acceptCash(double money); } /** * Created by hero on 16-3-29. */ public class CashNormal extends CashSuper{ @Override public double accep

大话设计模式java版本 第二章 策略模式

package strategy; //嵌入策略 public class CashContext { private Cash cs; public CashContext(Cash cs) { super(); this.cs = cs; } public double getResult(double money){ return cs.acceptCash(money); } } package strategy; public interface Cash { public abstr

大话设计模式 笔记2——策略模式

定义Context类,将简单工厂模式中,在客户端的判断转移到了后台context类中,定义运算的基类,该基类具有运算的抽象方法,扩展出多种子类后,分别对该抽象方法进行重写:后台根据前台的条件,判断并new出对应的对象后,将对象赋给一个基类对象,由基类对象调用对应的计算方法. Tips:在客户端中尽可能地消除判断等逻辑操作是很重要的让客户端认识更少的类任何需求的变更都是要成本的

大话设计模式第九章---原型模式PHP实现

首先,PHP对象clone参考资料: http://php.net/manual/en/language.oop5.cloning.php#object.clone Object Cloning¶ Creating a copy of an object with fully replicated properties is not always the wanted behavior. A good example of the need for copy constructors, is i

设计模式之第8章-策略模式(Java实现)

设计模式之第8章-策略模式(Java实现) “年前大酬宾了啊,现在理发冲500送300,冲1000送500了.鱼哥赶紧充钱啊,理发这事基本一个月一回,挺实惠的啊.不过话说那个理发店的老板好傻啊,冲1000才送500,不如冲两次500,这样可以送600呢.”“这只能说明你不是很笨,但是也算不上聪明.”“啊?难道我想错了?”“这是一种策略,策略,懂?他如果是冲1000送700的话你是不是很大的可能性冲500?而不是1000,但是如果这样的话,在“聪明人”,对,没错,就是你这样的人来说,冲两次500表

大话设计模式_简单工厂模式(Java代码)

简单的描述:一个父类.多个子类,实例化那个子类由一个单独的工厂类来进行 图片摘自大话设计模式: 运算类: 1 package com.longsheng.simpleFactory; 2 3 public class Calculate { 4 5 private double firstNum; 6 private double secondNum; 7 8 public double getFirstNum() { 9 return firstNum; 10 } 11 12 public v

大话设计模式之简单工厂模式&amp;工厂方法模式&amp;抽象工厂模式

创造类模式分为三种:简单工厂模式,工厂模式和抽象工厂模式. 定义: 简单工厂模式:用一个单独的类来做创造实例的过程. 工厂模式:一个用于创建对象的接口,让子类决定实例化哪一个类,讲一个类的实例化 延迟到其子类. 抽象工厂模式:为创建一组相关或相互依赖的对象的类,而不指定具体类. 结构图: 这是简单工厂的结构图,从图中就很好理解. 简单工厂的优点: 根据用户需要,new出需要的对象. 但是简单工厂弊端: 当新加入一个功能是,就要修改工厂.这个时候,就需要工厂模式了. 从图中我们可以看出: 工厂模式