php设计模式2策略模式
<?php /** ******************************************************
* 策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,
* 从而使得它们可以相互替换。策略模式使得算法可以 在不影响到客户端的情况下发生变化。
* 策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。
* 由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。
* *********************************************************
*/ /*
* 数据源保存方式接口 定义了数据源操作的四种基本方式 (增,删,改,查)
*/
interface data_source {
public function add();
public function delete();
public function edit();
public function find();
} /**
* 数据库保存方式具体类
* 具体的数据源接口的一种形式,该形式是把数据保存到数据库
*/
class mysql_datasource implements data_source {
public function add() {
echo 'mysql数据添加';
}
public function delete() {
echo 'mysql数据删除';
}
public function edit() {
echo 'mysql数据修改';
}
public function find() {
echo 'mysql数据查询';
}
}
/**
* oracle保存方式具体类
* 具体的数据源接口的另一种形式,该形式是把数据保存到oracle数据库
*/
class oracle_datasource implements data_source {
public function add() {
echo 'oracle数据添加';
}
public function delete() {
echo 'oracle数据删除';
}
public function edit() {
echo 'oracle数据编辑';
}
public function find() {
echo 'oracle数据查询';
}
} /**
* 文件保存方式具体类
* 具体的数据源接口的另一种形式,该形式是把数据保存到文件
*/
class file_datasource implements data_source {
public function add() {
echo 'file数据添加';
}
public function delete() {
echo 'file数据删除';
}
public function edit() {
echo 'file数据编辑';
}
public function find() {
echo 'file数据查找';
}
} /**
* 策略类
* 该类根据要求返回符合要求类别的的数据源
* 本例 $strategyName = db_source 或者 $strategyName = file_source
*/
class strategy {
public static function getstrategy($data_source) {
return new $data_source ();
}
} /**
* 主体事件处理类
*/
class control {
private $datasource;
public function __construct($datasource) {
$this->datacource = strategy::getstrategy ( $datasource );
}
public function add() {
$this->datacource->add ();
}
public function edit() {
$this->datacource->edit ();
}
public function delete() {
$this->datacource->delete ();
}
public function find() {
$this->datacource->find ();
}
} header ( 'content-type:text/html;charset=utf-8' );
$datasource = "file_datasource";
$concretecontrol = new control ( $datasource );
$concretecontrol->add (); ?>
php设计模式2策略模式的更多相关文章
- 设计模式:策略模式(Strategy)
定 义:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化, 不会影响到使用算法的客户. 示例:商场收银系统,实现正常收费.满300返100.打8折.......等不同收费 ...
- PHP设计模式之策略模式
前提: 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能.如查 找.排序等,一种常用的方法是硬编码(Hard Cod ...
- JavaScript设计模式之策略模式(学习笔记)
在网上搜索“为什么MVC不是一种设计模式呢?”其中有解答:MVC其实是三个经典设计模式的演变:观察者模式(Observer).策略模式(Strategy).组合模式(Composite).所以我今天选 ...
- 乐在其中设计模式(C#) - 策略模式(Strategy Pattern)
原文:乐在其中设计模式(C#) - 策略模式(Strategy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 策略模式(Strategy Pattern) 作者:webabc ...
- JavaScript设计模式之策略模式
所谓"条条道路通罗马",在现实中,为达到某种目的往往不是只有一种方法.比如挣钱养家:可以做点小生意,可以打分工,甚至还可以是偷.抢.赌等等各种手段.在程序语言设计中,也会遇到这种类 ...
- 【设计模式】【应用】使用模板方法设计模式、策略模式 处理DAO中的增删改查
原文:使用模板方法设计模式.策略模式 处理DAO中的增删改查 关于模板模式和策略模式参考前面的文章. 分析 在dao中,我们经常要做增删改查操作,如果每个对每个业务对象的操作都写一遍,代码量非常庞大. ...
- [design-patterns]设计模式之一策略模式
设计模式 从今天开始开启设计模式专栏,我会系统的分析和总结每一个设计模式以及应用场景.那么首先,什么是设计模式呢,作为一个软件开发人员,程序人人都会写,但是写出一款逻辑清晰,扩展性强,可维护的程序就不 ...
- 设计模式入门,策略模式,c++代码实现
// test01.cpp : Defines the entry point for the console application.////第一章,设计模式入门,策略模式#include &quo ...
- 设计模式之策略模式和状态模式(strategy pattern & state pattern)
本文来讲解一下两个结构比较相似的行为设计模式:策略模式和状态模式.两者单独的理解和学习都是比较直观简单的,但是实际使用的时候却并不好实践,算是易学难用的设计模式吧.这也是把两者放在一起介绍的原因,经过 ...
- python设计模式之策略模式
每次看到项目中存在大量的if else代码时,都会心生一丝不安全感. 特别是产品给的需求需要添加或者更改一种if条件时,生怕会因为自己的疏忽而使代码天崩地裂,哈哈,本文的目的就是来解决这种不安全感的, ...
随机推荐
- HDOJ(HDU) 1877 又一版 A+B(进制、、)
Problem Description 输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数. Input 输入格式:测试输 ...
- 寻找INTERIGHT衬衫男神! [复制链接]
寻找INTERIGHT衬衫男神! - 公告板 - 京东内部论坛 - Powered by Discuz! 寻找INTERIGHT衬衫男神! [复制链接]
- H - Food - hdu 4292(简单最大流)
题目大意:有N个人,然后有F种食品和D种饮料,每个人都有喜欢的饮料和食品,求出来这些食品最多能满足多少人的需求. 输入描述: 分析:以前是做过类似的题目的,不过输入的信息量比较大,还是使用邻接表的好些 ...
- Android 开发经验
学习社区 eoe移动开发者社区 (link) 链接:http://www.eoeandroid.com/ 环境配置 Cocos2d-x 3.x 全平台新手开发配置教程 链接:http://www.co ...
- 2016 cocoapods的安装和使用以及版本升级遇到的问题
一.CocoaPods是什么? CocoaPods是一个负责管理iOS项目中第三方开源库的工具.CocoaPods的项目源码在Github上管理.该项目开始于2011年8月12日,在这两年多的时间里, ...
- 高效JQuery编码
缓存变量 DOM遍历是昂贵的,所以尽量将会重用的元素缓存. // 糟糕 h = $('#element').height(); $('#element').css('height',h-20); ...
- android ListView和GridView拖拽移位具体实现及拓展
关于ListView拖拽移动位置,想必大家并不陌生,比较不错的软件都用到如此功能了.如:搜狐,网易,百度等,但是相比来说还是百度的用户体验较好,不偏心了,下面看几个示例: 首 ...
- PowerDesigner 生成带凝视SQL 各个版本号通用10(12、15)
做数据库是设计时最苦恼的事就是用PowerDesigner工具设计完数据库运行SQL文件后没有凝视.那么怎么才干让PowerDesigner设计完有凝视呢,下边教你一个笨的方法,方法尽管笨,可是能实现 ...
- Jetty开发指导:框架
Spring设置 你能嵌入Jetty到你的项目中,也能够使用差点儿全部的IoC类型框架,包含Spring.假设全部你想做的是在你的Spring中设置Jetty Server,那么以下的xml片段能够作 ...
- 转 [教程] Unity3D中角色的动画脚本的编写(二)
在上一篇,我们介绍了有关Animation这个类中的部分方法,我后来想了想,这么介绍也不是个办法(其实有些方法我自己也没用过),该介绍点实际的东西了,毕竟我们是要做东西出来的.那好 ...