单一职责原则(SRP)
interface Db_Adpater
{/*** 数据库连接* @param $config 数据库配置* @return mixed resource*/public function connect($config);/*** 执行数据库查询* @param $query 数据库查询的SQL字符串* @param $handle 连接对象* @return mixed*/public function query($query,$handle);
}
class Db_Adapter_Mysql implements Db_Adpater
{private $_dbLink; //数据库连接字符串标识/*** 数据库连接函数* @param $config 数据库配置* @return resource* @throws Db_Exception*/public function connect($config){if($this->_dbLink = @mysql_connect($config->host . (empty($config->port) ? '' : ':' . $config->prot) ,$config->user, $config->password, true)){if(@mysql_select_db($config->database, $this->_dbLink)){if($config->charset){mysql_query("SET NAME '{$config->charset}'", $this->_dbLink);}return $this->_dbLink;}}throw new Db_Exception(@mysql_error($this->_dbLink));}/*** 执行数据库查询* @param $query 数据库查询SQL字符串* @param $handle 连接对象* @return resource*/public function query($query,$handle){if($resource = @mysql_query($query,$handle))return $resource;}
}
class Db_Adapter_sqlite implements Db_Adpater
{private $_dbLink; //数据库连接字符串标识public function connect($config){if($this->_dbLink = sqlite_open($config->file, 0666, $error)){return $this->_dbLink;}throw new Db_Exception($error);}public function query($query, $handle){if($resource = @sqlite_query($query,$handle)){return $resource;}}
}
现在如果需要一个数据库操作的方法怎么做,只需定义一个工厂类,根据传入不同的生成需要的类即可
class sqlFactory
{public static function factory($type){if(include_once 'Drivers/' . $type . '.php'){$classname = 'Db_Adapter_'.$type;return new $classname;}elsethrow new Exception('Driver not found');}
}
$db = sqlFactory::factory('MySQL');
$db = sqlFactory::factory('SQLite');
/*** 厨师类,命令接受者与执行者* Class cook*/
class cook
{public function meal(){echo '番茄炒鸡蛋',PHP_EOL;}public function drink(){echo '紫菜蛋花汤',PHP_EOL;}public function ok(){echo '完毕',PHP_EOL;}
}
//然后是命令接口
interface Command
{public function execute();
}
轮到服务员出场,服务员是命令的传送者,通常你到饭馆吃饭都是叫服务员吧,不能直接叫厨师,一般都是叫“服务员,给我来盘番茄炒西红柿”。所以,服务员是顾客和厨师之间的命令沟通都。
class MealCommand implements Command
{private $cook;//绑定命令接受者public function __construct(cook $cook){$this->cook = $cook;}public function execute(){$this->cook->meal();//把消息传给厨师,让厨师做饭,下同}
}
class DrinkCommand implements Command
{private $cook;//绑定命令接受者public function __construct(cook $cook){$this->cook = $cook;}public function execute(){$this->cook->drink();}
}
class cookControl
{private $mealcommand;private $drinkcommand;//将命令发送者绑定以命令接收器上面来public function addCommand(Command $mealcommand, Command $drinkcommand){$this->mealcommand = $mealcommand;$this->drinkcommand = $drinkcommand;}public function callmeal(){$this->mealcommand->execute();}public function calldrink(){$this->drinkcommand->execute();}
}
$control = new cookControl;
$cook = new cook;
$mealcommand = new MealCommand($cook);
$drinkcommand = new DrinkCommand($cook);
$control->addCommand($mealcommand,$drinkcommand);
$control->callmeal();
$control->calldrink();
转载于:https://www.cnblogs.com/chenqionghe/p/4749915.html
单一职责原则(SRP)相关推荐
- [置顶] 设计模式之六大原则——单一职责原则(SRP)
定义: 应该有且仅有一个原因引起类的变更. There should never be more than one reason for a class to change. 优点: 1.类的复杂性降 ...
- 围观设计模式(1)--单一职责原则(SRP,Single Responsibility Principle)
沉寂了一个月的时间,仔细学习了下设计模式,从本篇博文开始陆续更新设计模式系列的文章,我给它起了个有意思的名字叫做:"围观"设计模式,当然围观是加引号的,我写博文分享的目的一方面是将 ...
- 设计模式原则--单一职责原则
单一职责原则(SRP) 定义:就一个类而言,应该仅有一个引起它变化的原因 场景: 一个公司有3类员工,分别是 主管,程序员,销售 代码: using System; using System.Coll ...
- 设计模式原则篇:(1)单一职责原则--Single Responsibility Principle
上篇文章提及到设计模式中应遵循的设计原则,并且列出了设计模式中应当遵循的六大原则. 次篇文章主要讨论单一职责原则. 单一职责原则(SRP): 不要存在多于一个导致类变更的原因.简单的讲,就是一个类或接 ...
- android activity解耦,Android与设计模式:用单一职责原则为Activity解耦
一.什么是单一职责原则单一职责原则(SRP:Single responsibility principle)又称单一功能原则,其定义为:一个类,应该只有一个可以导致变化的原因.光看概念 一.什么是单一 ...
- 被误解的单一职责原则 - Joe
谷歌工程主管乔·林奇的文章,获得SOLID原则作者鲍勃大叔点赞转发的文章: 作者推荐将SRP视为DDD原则的自然结果:跨DDD限制上下文共享的模型是不安全的. 单一职责原则 (SRP) 是SOLID设 ...
- 设计原则-单一职责原则
单一职责原则 文章目录 单一职责原则 概述 单一职责原则问题由来 职责如何理解呢? 什么是职责呢 ? 举例1 Rectangle 个人理解 举例2 Modem SRP核心思想 总结 参考文档 概述 在 ...
- 设计原则(单一职责原则 开放封闭原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则)
设计原则 单一职责原则(SRP) 从三大特性角度看原则: 应用的设计模式: 开放封闭原则(OCP) 从三大特性角度看原则: 应用的设计模式: 里氏替换原则(LSP) 从三大特性角度看原则: 应用的设计 ...
- 理论一:对于单一职责原则,如何判定某个的职责是否够“单一”?
上几节课中,我们介绍了面向对象相关的知识.从今天起,我们开始学习一些经典的设计原则,其中包括,SOLID.KISS.YAGNI.DRY.LOD等. 这些设计原则,从字面上理解,都不难.你一看就感觉懂了 ...
最新文章
- OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)?
- 取得Repeater内部控件命令名与命令参数
- 深入解析浏览器的幕后工作原理(四) DOM树
- android adapter排序,Android BindingAdapter执行顺序?
- IDEA中双击两下shift全局搜索怎样取消和修改
- boost::function_types::is_member_function_pointer用法的测试程序
- Solr管理页面 上
- ECCV2018--点云匹配
- php发送邮件pop3,php 发送邮件与pop3邮件登录代码
- 彻底解决SP2下ALEXA工具条无法显示(转)
- wx.getStorage异步和wx.getStorageSync同步区别
- 案例分享:Qt的PPT播放器
- 互联网流量的本质是什么?
- itunes显示无法更新服务器失败怎么办啊,更新iTunes出现错误 iTunes更新失败解决方案...
- at指令 meid_【技术分享】使用AT调制解调器命令解锁LG Android屏幕
- 潜入蓝翔技校二十天 探究蓝翔黑客真正的奥秘
- HTML5 之 Form 标签
- prometheus+alertmanager+webhook实现自定义监控报警系统
- 产生冠军(HDU1002)谢庆皇
- Golang实现Raft一致性算法