php设计模式课程---6、策略模式如何使用
php设计模式课程---6、策略模式如何使用
一、总结
一句话总结:比如代码需求,做一饭店,有南北方不同菜系,不同分店有不同的饭菜汤的需求,代码怎么设计
从饭店有特色过渡到厨师有特色(南方厨师(南方饭,南方菜,南方汤),北方厨师(北方饭,北方菜,北方汤))
利用厨师的组合实现饭店有不同特色(满足不同分店的需求)
1、传入的参数是对象,执行对象的方法如何实现?
就是普通的->执行方法: return $this->fanCreateor->fan();
83 class FD {
84 protected $fanCreateor = null;
85 protected $caiCreateor = null;
86 protected $tangCreateor = null;
87
88 public function __construct($f,$c,$t) {
89 $this->fanCreateor = $f;
90 $this->caiCreateor = $c;
91 $this->tangCreateor = $t;
92 }
93
94 public function createFan() {
95 return $this->fanCreateor->fan();
96 }
97
98 public function createCai() {
99 return $this->caiCreateor->cai();
100 }
101
102 public function createTang() {
103 return $this->tangCreateor->tang();
104 }
105 }
106
107
108 $fd = new FD(new NorthCook() , new NorthCook() , new SouthCook);
2、编程的灵活性原则?
有什么 比 是什么 更灵活
组合 比 继承更灵活
二、策略模式如何使用
1、代码
<?php
/*
// 做一饭店
class FanDian {
public function fan() {
return '面条';
} public function cai() {
return '炒菜';
} public function tang() {
return '蛋花汤';
}
} class SouthDian {
public function fan() {
return '大米饭';
} public function cai() {
return '烧菜+奶油';
} public function tang() {
return '海鲜汤';
}
} class BjDian {
public function fan() {
return '大米饭';
} public function cai() {
return '炒菜';
} public function tang() {
return null;
}
} $fd = new FanDian();
echo $fd->tang(); */ class NorthCook {
public function fan() {
return '面条';
} public function cai() {
return '炒菜';
} public function tang() {
return '蛋花汤';
}
} class SouthCook {
public function fan() {
return '米饭';
} public function cai() {
return '烧菜+奶油';
} public function tang() {
return '海鲜汤';
}
} class FD {
protected $fanCreateor = null;
protected $caiCreateor = null;
protected $tangCreateor = null; public function __construct($f,$c,$t) {
$this->fanCreateor = $f;
$this->caiCreateor = $c;
$this->tangCreateor = $t;
} public function createFan() {
return $this->fanCreateor->fan();
} public function createCai() {
return $this->caiCreateor->cai();
} public function createTang() {
return $this->tangCreateor->tang();
}
} $fd = new FD(new NorthCook() , new NorthCook() , new SouthCook); echo $fd->createFan() , "<br>";
echo $fd->createTang() , "<br />"; ?>
php设计模式课程---6、策略模式如何使用的更多相关文章
- 【转】设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成 ...
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也经常遇到类似的情况,实现某一个功能有多种算法或者策略,我们能够依据环境或者条件的不同选择不同的算法或者策略来完毕 ...
- 《Head First 设计模式》[01] 策略模式
<Head First 设计模式>(点击查看详情) 1.写在前面的话 之前在列书单的时候,看网友对于设计模式的推荐里说,设计模式的书类别都大同小异,于是自己就选择了Head First系列 ...
- javascript设计模式--策略模式
javascript策略模式总结 1.什么是策略模式? 策略模式的定义是:定义一系列的算法,把他们独立封装起来,并且可以相互替换. 例如我们需要写一段代码来计算员工的奖金.当绩效为a时,奖金为工资的5 ...
- [head first 设计模式] 第一章 策略模式
[head first 设计模式] 第一章 策略模式 让我们先从一个简单的鸭子模拟器开始讲起. 假设有个简单的鸭子模拟器,游戏中会出现各种鸭子,此系统的原始设计如下,设计了一个鸭子超类,并让各种鸭子继 ...
- Python设计模式: 最佳的"策略"模式实践代码
Python设计模式: 最佳的"策略"模式实践代码 今天抽空看了下流畅的python,发现里面介绍了不少python自带的库的使用实例,用起来非常的优雅. 平时用Python来写爬 ...
- [设计模式] javascript 之 策略模式
策略模式说明 定义: 封装一系列的算法,使得他们之间可以相互替换,本模式使用算法独立于使用它的客户的变化. 说明:策略模式,是一种组织算法的模式,核心不在于算法,而在于组织一系列的算法,并且如何去使用 ...
- 设计模式:Strategy 策略模式 -- 行为型
设计模式 策略模式Strategy(对象行为型) 这是几年前写的文字(转载做的笔记更准确些),发觉还是废话多了点. 其实,核心就是5.结构中的UML图 5.1 和 5.2(新增).现在看这张图就觉得一 ...
- 设计模式浅谈----策略模式(c#及java实现)
一.何为策略模式 策略模式是行为型模式的一种,主要用于需要使用不同的算法来处理不同的数据对象时使用,是一种可以在运行时选择算法的设计模式.也称为政策模式. 主要解决:在有多种算法相似的情况下,使用 i ...
- JavaScript设计模式 Item 7 --策略模式Strategy
1.策略模式的定义 何为策略?比如我们要去某个地方旅游,可以根据具体的实际情况来选择出行的线路. 如果没有时间但是不在乎钱,可以选择坐飞机. 如果没有钱,可以选择坐大巴或者火车. 如果再穷一点,可以选 ...
随机推荐
- Android内容提供者
一个应用中的数据库对别人是不会提供直接的访问的,而是提供接口给别人访问,但是一般应用开发的时候都是去获取别人的数据,而不是自己提供数据. 继承ContentProvider: 在Menifest中注册 ...
- UVA 10209
10209 - Is This Integration ? #include <stdio.h> #include <math.h> /* */ //多次错误都是因为我将PI定 ...
- 【转】【Python + selenium】linux和mac环境,驱动器chromedriver和测试报告HTMLTestRunner放置的位置
感谢: 作者:gz_tester,文章:<linux和mac环境,chromedriver和HTMLTestRunner放置的位置> 使用场景 配置python selenium 环境 使 ...
- Python snap
orderedDict enum sys.path 注册装饰器 装饰器检查 入参 Flask01 flask_script flask blue print functools.partial dns ...
- HBase概念及表格设计
HBase概念及表格设计 1. 概述(扯淡~) HBase是一帮家伙看了Google发布的一片名为“BigTable”的论文以后,犹如醍醐灌顶,进而“山寨”出来的一套系统. 由此可见: 1. 几乎所有 ...
- 如何正确对tomcat host进行配置
今天在对tomcat的host容器(即虚拟主机的配置)进行配置时,发现即使修改了host name的值(默认为localhost),但是仍无法访问web项目的问题(提示域名解析出错).只能使用默认的值 ...
- jQuery Easy UI Draggable(拖动)组件
上文已经提到过了 jQuery EasyUI插件引用一般我们经常使用的有两种方式(排除easyload载入方式),所以本篇要总结的Draggable组件相同有两种方式载入: (1).使用class载入 ...
- Django模板系统(非常详细)(后台数据如何展示在前台)
前面的章节我们看到如何在视图中返回HTML,但是HTML是硬编码在Python代码中的这会导致几个问题:1,显然,任何页面的改动会牵扯到Python代码的改动网站的设计改动会比Python代码改动更频 ...
- 九度OJ 1195:最长&最短文本 (搜索)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3144 解决:1156 题目描述: 输入多行字符串,请按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输 ...
- iptables的扩展,layer7实现
l7filter:介绍 能过滤7层协议,例如过滤QQ.迅雷 原版只支持2.6.28,不支持centos6的2.6.32:马哥的版本支持2.6.32 实现l7filter: 给内核(netfilter) ...