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(){
if($this->price == self::Ted) return 30;
elseif($this->price == self::Sed) return 5*$this->num;
else { $this->price == self::Ted; return 35;}
} public function ccc(){
if($this->price == self::Ted) return 'a';
elseif($this->price == self::Sed) return 'b';
else{ $this->price == self::Ted; return 35;}
} } class Aa extends Moshi{}
class Bb extends Moshi{}
var_dump(Moshi::Ted);//类中常量的调用
$a=new Aa(5,Moshi::Ted);
print "{$a->cost()}--{$a->ccc()}\n";
$b=new Aa(3,Moshi::Sed);
print "{$b->cost()}--{$b->ccc()}\n"; $c=new Aa(5,4);
print "{$c->cost()}--{$c->ccc()}--{$c->price}\n"; <?php abstract class Moshi2{ private $num;
private $price; public function __construct($num,Sget $sget)
{
$this->num = $num;
$this->price = $sget;
} public function cost(){
return $this->price->cost($this); } public function ccc(){
return $this->price->charge();
} public function gets(){
return $this->num;
}
} class Aa extends Moshi2{}
class Bb extends Moshi2{} abstract class Sget{
abstract function cost(Moshi2 $moshi2);
abstract function charge();
} class Ee extends Sget{
function cost(Moshi2 $moshi2){
return $moshi2->gets() * 5;
}
function charge(){
return 'a';
}
} class Ff extends Sget{
function cost(Moshi2 $moshi2){
return 30;
}
function charge(){
return 'b';
}
} $bb = new Aa(4,new Ee());
print "{$bb->cost()}\n"; $les[] = new Aa(4,new Ee());
$les[] = new Bb(4,new Ff());
var_dump($les);
foreach($les as $val){
print "{$val->cost()}--";
print "{$val->ccc()}\n"; }
php策略模式的研究的更多相关文章
- 设计模式-策略模式(Strategy Model)
1.概述 在开发过程中常常会遇到类似问题,实现一个功能的时候往往有多种算法/方法(策略),我们可以根据环境的不同来使用不同的算法或策略来实现这一功能. 如在人物比较排序的实现中,我们有 ...
- (转载)设计模式之-策略模式(Strategy)
原文:http://blog.sina.com.cn/s/blog_48df74430100t2m7.html 前言 部门组织培训,<Effective Java>,每人每天给大家讲解一节 ...
- java23种设计模式之一: 策略模式
由于最近在研究学习设计模式,我会用自己的理解方式来表述对设计模式的学习和认识,通过最常用.好记的案例来记住和使用设计模式,希望对设计代码方面有所提高和改进. 一.应用背景 在软件开发中常常遇到 ...
- 【设计模式】 模式PK:策略模式VS桥梁模式
1.概述 我们先来看两种模式的通用类图. 两者之间确实很相似.如果把策略模式的环境角色变更为一个抽象类加一个实现类,或者桥梁模式的抽象角色未实现,只有修正抽象化角色,想想看,这两个类图有什么地方不一样 ...
- 鸭子-策略模式(Strategy)
前言 万事开头难,最近对这句话体会深刻!这篇文章是这个系列正式开始介绍设计模式的第一篇,所以肩负着确定这个系列风格的历史重任,它在我脑袋里默默地酝酿了好多天,却只搜刮出了一点儿不太清晰的轮廓,可是时间 ...
- 策略模式 VS 桥梁模式
这对冤家终于碰头了,策略模式与桥梁模式是如此相似,简直就是孪生兄弟,要把它们两个分开需要花费大量智力,我们来看看两者的通用类图,如图33-1所示. 图33-1 策略模式(左)和桥梁模式(右)通用类图 ...
- javascript设计模式:策略模式
前言 策略模式有效利用组合.委托.多态等技术和思想,可以有效避免多重条件选择语句. 策略模式对开放-封闭原则提供了很好的支持,将算法封装在strategy中,使得他们易于切换.理解.扩展. 策略模式中 ...
- StrategyPattern (策略模式)
/** * 策略模式 * @author TMAC-J * 根据环境的不同选择不同的策略,把策略用接口抽象出来 */ public class StrategyPattern { interface ...
- JAVA 设计模式之策略模式
定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换. 类型:行为类模式 策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这些类实现相同的接口,相互之间可以替换.在前面说过 ...
随机推荐
- 欧几里得证明$\sqrt{2}$是无理数
选自<费马大定理:一个困惑了世间智者358年的谜>,有少许改动. 原译者:薛密 \(\sqrt{2}\)是无理数,即不能写成一个分数.欧几里得以反证法证明此结论.第一步是假定相反的事实是真 ...
- ML—随机森林·1
Introduction to Random forest(Simplified) With increase in computational power, we can now choose al ...
- Javascript实现AutoComplete自动匹配功能
功能分析: 避免客户端频繁的访问服务器,因此客户端需要一个timer,监听键盘按键间隔时间,300-600毫秒能够接受. 服务端对要查找的数据源如果不大的话,应该尽量缓存在服务端内存中,而不是每次查找 ...
- 关联规则之Aprior算法(购物篮分析)
0.支持度与置信度 <mahout实战>与<机器学习实战>一起该买的记录数占所有商品记录总数的比例——支持度(整体) 买了<mahout实战>与<机器学习实战 ...
- 线程7-ThreadLocal
有时间再整理 ThreadLocal不是用来解决对象共享访问问题的,而主要是提供了保持对象的方法和避免参数传递的方便的对象访问方式.归纳了两点: 1.每个线程中都有一个自己的ThreadLocalMa ...
- node.js安装cnpm 提高下载速度
由于中国网络特殊的网络环境原因,国外部分网站访问速度很慢. 安装node.js时,使用npm 安装软件速度也很慢,可以使用阿里的cnpm来解决 官方网址:http://npm.taobao.org: ...
- Effective Java 读书笔记之七 通用程序设计
一.将局部变量的作用域最小化 1.在第一次使用变量的地方声明 2.几乎每个变量的声明都应该包含一个初始化表达式:try-catch语句是一个例外 3.使方法小而集中是一个好的策略 二.for-each ...
- qt-5.6.0 移植之tslib 配置及编译
tslib 是qt启动时的一个触屏校正检验程序. 它的配置以及编译比较简单. 第一步, 下载tslib源码包: http://download.csdn.net/detail/MKNDG/329156 ...
- BZOJ 1044: [HAOI2008]木棍分割
Description 求 \(n\) 根木棍长度为 \(L\) ,分成 \(m\) 份,使最长长度最短,并求出方案数. Sol 二分+DP. 二分很简单啊,然后就是方案数的求法. 状态就是 \(f[ ...
- BZOJ 4547: Hdu5171 小奇的集合
Sol 首先,考虑这个要怎么搞...让总和最大的方法就是选出当前集合中最大的两个数相加放入集合中就可以了,证明非常简单,当前集合的和为x,它的和只会一直往后增加,所以只需要找到最大的两个数的和加入便是 ...