php策略模式的研究】的更多相关文章

<?php abstract class Moshi{     private $num;     public $price;     const Ted=1;     const Sed=2;     public function __construct($num,$price)     {         $this->num = $num;         $this->price = $price;     }     public function cost(){     …
1.概述     在开发过程中常常会遇到类似问题,实现一个功能的时候往往有多种算法/方法(策略),我们可以根据环境的不同来使用不同的算法或策略来实现这一功能.     如在人物比较排序的实现中,我们有时需要把年龄做为比较的标准,或者有时又想将身高作为比较的标准,不同的比较标准也就衍生出了统一个比较目的的不同算法实现,在搜索问题中也是类似,有可能用到二分查找.顺序查找之类.通常较简单直接的思维便是将所有的算法(策略)写成一个类的方法,再通过客户端去调用:也可一将所有的算法全部封装在一个方法中用一堆…
原文:http://blog.sina.com.cn/s/blog_48df74430100t2m7.html 前言 部门组织培训,<Effective Java>,每人每天给大家讲解一节.但十个同事就我一个是做.Net开发的,所以每回我就是听众,前两天的一节是<用函数对象表示策略>,讲的非常短频快,但下来我的感触颇多,对代码不再有当初的激情了,但总想把平时经常用到的,别人已经总结归纳的用文字记录下来,好记性不如烂笔头,只有记录下来的才是属于自己的.于是决定从本篇开始我的设计模式之…
由于最近在研究学习设计模式,我会用自己的理解方式来表述对设计模式的学习和认识,通过最常用.好记的案例来记住和使用设计模式,希望对设计代码方面有所提高和改进. 一.应用背景     在软件开发中常常遇到这种情况,实现某一个功能有多种算法或者策略,我们可以根据应用场景的不同选择不同的算法或者策略来完成该功能.把一个类(A)中经常改变或者将来可能改变的部分提取出来,作为一个接口(B),然后在类(A)中包含这个接口(B),这样类(A)的实例在运行时就可以随意调用实现了这个接口的类(C)的行为.比如定义一…
1.概述 我们先来看两种模式的通用类图. 两者之间确实很相似.如果把策略模式的环境角色变更为一个抽象类加一个实现类,或者桥梁模式的抽象角色未实现,只有修正抽象化角色,想想看,这两个类图有什么地方不一样?完全一样!正是由于类似场景的存在才导致了两者在实际应用中经常混淆的情况发生,我们来举例说明两者有何差别. 大家都知道邮件有两种格式:文本邮件(TextMail)和超文本邮件(HTMLMaiL),在文本邮件中只能有简单的文字信息,而在超文本邮件中可以有复杂文字(带有颜色.字体等属性).图片.视频等,…
前言 万事开头难,最近对这句话体会深刻!这篇文章是这个系列正式开始介绍设计模式的第一篇,所以肩负着确定这个系列风格的历史重任,它在我脑袋里默默地酝酿了好多天,却只搜刮出了一点儿不太清晰的轮廓,可是时间不等人,以后再多“迭代”几次吧!在前面的随笔里,我已经提到了,这个系列准备以<Head First Design Patterns>的结构为主线,所以每个模式的核心故事都是取材于此书,在此再次声明一下.不管怎样,宗旨是为了跟大家一起循序渐进地去认识设计模式. 上一篇:模式和原则,得到很多朋友的支持…
这对冤家终于碰头了,策略模式与桥梁模式是如此相似,简直就是孪生兄弟,要把它们两个分开需要花费大量智力,我们来看看两者的通用类图,如图33-1所示. 图33-1 策略模式(左)和桥梁模式(右)通用类图 什么?你没有看出两者之间很相似?如果把策略模式的环境角色变更为一个抽象类加一个实现类,或者桥梁模式的抽象角色未实现,只有修正抽象化角色,想想看,这两个类图有什么地方不一样?一样,完全一样!正是由于类似场景存在才导致了两者在实际应用中经常混淆的情况发生,我们来举例说明两者有何差别. 大家应该都知道邮件…
前言 策略模式有效利用组合.委托.多态等技术和思想,可以有效避免多重条件选择语句. 策略模式对开放-封闭原则提供了很好的支持,将算法封装在strategy中,使得他们易于切换.理解.扩展. 策略模式中的算法也可以复用在系统的其他地方,从而有效的减少了复制粘贴工作. 策略模式中利用组合和委托来让Context拥有执行算法的能力,这也是继承的一种更轻便的替代方案. 计算奖金 var strategies={ "s":function(salary){ return salary*4; },…
/** * 策略模式 * @author TMAC-J * 根据环境的不同选择不同的策略,把策略用接口抽象出来 */ public class StrategyPattern { interface Strategy{ void operate(); } public class StrategyA implements Strategy{ @Override public void operate() { System.out.println("策略A"); } } public c…
定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换. 类型:行为类模式 策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这些类实现相同的接口,相互之间可以替换.在前面说过的行为类模式中,有一种模式也是关注对算法的封装--模版方法模式,对照类图可以看到,策略模式与模版方法模式的区别仅仅是多了一个单独的封装类Context,它与模版方法模式的区别在于:在模版方法模式中,调用算法的主体在抽象的父类中,而在策略模式中,调用算法的主体则是封装到了封装类Context中,抽象策…