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 设计模式之策略模式
定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换. 类型:行为类模式 策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这些类实现相同的接口,相互之间可以替换.在前面说过 ...
随机推荐
- TCP的流模式与UDP的报文模式对比
1 案例背景 在学习TCP-IP协议详解卷一时,读到介绍TCP协议的部分,发现TCP的首部是没有报文总长度字段的,而在UDP中是有的,对这个问题的思考引出了两者之间的区别. 2 案例 ...
- Access应用笔记<三>
在搭了一个数据库后,买了一本<让excel飞>,里面有提及access 经过研究之后,发现access+excel的结合确实能解决我的大部分难题,并且可以做得更好. 比较好的方法是, ac ...
- Android 4.4以上的存储读写权限
最近遇到一个奇怪现象,直接往Android的SD卡根目录写入文件,报异常:open failed EACCES:permission denied. 已经在manifest.xml中加入android ...
- 08OC之Foundation框架
1.Foundation框架简述 在前面,我们创建一个类的时候,都会选择Cocoa Class.到底Cocoa Class是什么东西呢? Cocoa 不是一门编程语言,因为它可以运行在多种编程语言上, ...
- BZOJ1455——罗马游戏
1.题目大意:维护一个数据结构,可以实现合并操作,还能询问最小值 2.分析:这种问题当然是可并堆啦 随便写了一个左偏树QAQ #include <cstdio> #include < ...
- mysql连表更新
1.需求 有2张表,a表和b表,要把b表的name数据复制到a表中,当2表的id字段一样的时候 UPDATE A a, B b SET a.name = b.my_name WHERE a.id = ...
- 说说JSON和JSONP,也许你会豁然开朗
前言 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socke ...
- canvas 中save和restore的用法
在创建新的控件或修改现有的控件时,我们都会涉及到重写控件或View的onDraw方法. onDraw方法会传入一个Canvas对象,它是你用来绘制控件视觉界面的画布. 在onDraw方法里,我们经常会 ...
- linux 文件系统sysvinit 流程分析
参考网上许多的教程. 然后有一下相关的笔记: kernel 在挂载完文件系统后,会执行第一个进程init 这个进程的PID为1 这个进程是所有进程的父进程 init 进程,首先要去读取inittab中 ...
- PHP获取IP地址
获取客户端IP地址:: function getIp(){ if(!empty($_SERVER['HTTP_CLIENT_IP'])){ return $_SERVER['HTTP_CLIENT_I ...