- 浏览: 13632554 次
- 性别:
- 来自: 洛杉矶
文章分类
- 全部博客 (1994)
- Php / Pear / Mysql / Node.js (378)
- Javascript /Jquery / Bootstrap / Web (435)
- Phone / IOS / Objective-C / Swift (137)
- Ubuntu / Mac / Github / Aptana / Nginx / Shell / Linux (335)
- Perl / Koha / Ruby / Markdown (8)
- Java / Jsp (12)
- Python 2 / Wxpython (25)
- Codeigniter / CakePHP (32)
- Div / Css / XML / HTML5 (179)
- WP / Joomla! / Magento / Shopify / Drupal / Moodle / Zimbra (275)
- Apache / VPN / Software (31)
- AS3.0/2.0 / Flex / Flash (45)
- Smarty (6)
- SEO (24)
- Google / Facebook / Pinterest / SNS (80)
- Tools (22)
最新评论
-
1455975567:
xuezhongyu01 写道wocan23 写道我想问下那个 ...
Mysql: LBS实现查找附近的人 (两经纬度之间的距离) -
xuezhongyu01:
wocan23 写道我想问下那个111.1是怎么得来的我也看不 ...
Mysql: LBS实现查找附近的人 (两经纬度之间的距离) -
18335864773:
试试 pageoffice 在线打开 PDF 文件吧. pag ...
jquery在线预览PDF文件,打开PDF文件 -
青春依旧:
opacity: 0.5; 个人喜欢这种方式!关于其他css特 ...
css透明度的设置 (兼容所有浏览器) -
July01:
推荐用StratoIO打印控件,浏览器和系统的兼容性都很好,而 ...
搞定网页打印自动分页问题
>>PHP实现单件模式的几种方式
工厂类是指包含一个专门用来创建其他对象的方法的类,工厂类在多态性编程实践中是至关重要的,它允许动态的替换类,修改配置,通常会使应用程序更加 灵活,熟练掌握工厂模式高级PHP开发人员是很重要的。
工厂模式通常用来返回符合类似接口的不同的类,工厂的一种常见用法就是创建多态的提供者,从而允许我们基于应用程序逻辑或者配置设置来决定应实例化哪一个 类,例如,可以使用这样的提供者来扩展一个类,而不需要重构应用程序的其他部分,从而使用新的扩展后的名称 。
通常,工厂模式有一个关键的构造,根据一般原则命名为Factory的静态方法,然而这只是一种原则,工厂方法可以任意命名,这个静态还可以接受任意数据 的参数,必须返回一个对象。
基本的工厂类
class MyObject{ //对象将从工厂返回 } class MyFactory{ public static function factory(){ return new MyObject(): } } $instance=MyFactory::factory();
使用工厂类解析图像文件
<?php interface IImage{ function getHeight(); function getWidth(); function getData(); } class Image_PNG implements IImage{ private $_width,$_height,$_data; public function __construct($file){ $this->_file=$file; $this->_parse(); } private function _parse(){ //完成PNG格式的解析工作 //并填充$_width,$_height,$_data; } public function getWidth(){ return $this->_width; } public function getHeight(){ return $this->_height; } public function getData(){ return $this->_data; } } class Image_JPEG implements IImage{ private $_width,$_height,$_data; public function __construct($file){ $this->_file=$file; $this->_parse(); } private function _parse(){ //完成JPEG格式的解析工作 //并填充$_width,$_height,$_data; } public function getWidth(){ return $this->_width; } public function getHeight(){ return $this->_height; } public function getData(){ return $this->_data; } } class ImageFactory{ public static function factory($file){ $pathParts=pathinfo($file); switch (strtolower($pathParts['extension'])) { case 'jpg': $ret=new Image_JPEG($file); break; case 'png': $ret=new Image_PNG($file); break; default: //有问题 } if($ret instanceof IImage){ return $ret; }else { //有问题 } } } //当使用图像文件名调用 工厂方法时,根据传入的文件类型不同,取得不同对象。
//调用ImageFactoyr $image=ImageFactory::factory('/path/to/my.jpg'); //$image是Image_JPEG类的一个实例 echo $image->getWidth();
使用工厂类解决数据库可移值性问题,在数据库应用程序中,工厂模式可以在以下两个方面起作用。
1.使软件更容易支持各种不同的数据库平台,用于扩展用户群
2.如果软件是内部使用,需要修改数据库时,可以容易将应用程序移值到别一个平台
在代码中,创建了一个名为User的数据库表来测试它,这个表定义一个名为email的varchar类型字段
<?php interface IDatabaseBindings{ public function userExists($email); } class PGSQL implements IDatabaseBindings{ protected $_connection; public function __construct(){ $this->_connection=pg_connect('dbname=example_db'); } public function userExists($email){ $emailEscaped=pg_escape_string($email); $query="select 1 from users where email='".$emailEscaped."'"; if($result=pg_query($query,$this->_connection)){ return (pg_num_rows($result)>0)?true:false; }else{ return false; } } } class MYSQL implements IDatabaseBindings{ protected $_connection; public function __construct(){ $this->_connection=mysql_connect('localhost'); mysql_select_db('example_db',$this->_connection); } public function userExists($email){ $emailEscaped=mysql_real_escape_string($email); $query="select 1 from users where email='".$emailEscaped."'"; if($result=mysql_query($query,$this->_connection)){ return (mysql_num_rows($result)>0)?true:false; }else{ return false; } } } class DatabaseFactory{ public static function factory(){ $type=loadtypefromconfigfile(); switch ($type){ case 'PGSQL': return new PGSQL(); break; case 'MYSQL': return new MYSQL(); break; } } }
应用程序不必知道它与何种类型的数据库连接,只会基于IDatabaseBindings接口定义的规则直接与工厂返回的实例打交道。
//调用DatabaseFactoy $db=DatabaseFactory::factory(); $db->userExists('person@example.com');
>>PHP实现单件模 式的几种方式
- PHP设计模式指南.rar (469.8 KB)
- 下载次数: 26
发表评论
-
PHP: 在类(class)中加载动态函数, 变量函数或半变量函数 variable function/method
2016-09-03 07:54 7095最终实例在下方 以前 ... -
MySQL入门 (七) : 储存引擎与资料型态
2016-09-03 07:49 45011 表格与储存引擎 表格(table)是资料库中用来储存 ... -
MySQL入门 (六) : 字元集与资料库
2016-09-03 07:47 45001 Character Set与Collation 任何 ... -
MySQL入门 (五) : CRUD 与资料维护
2016-09-03 07:46 54141 取得表格资讯 1.1 DESCRIBE指令 「 ... -
MySQL入门 (四) : JOIN 与UNION 查询
2016-09-03 07:42 44381 使用多个表格 在「world」资料库的「countr ... -
PHP: 关键字global 和 超全局变量$GLOBALS的用法、解释、区别
2016-08-31 12:07 4977$GLOBALS 是一个关联数组,每一个变量为一个 ... -
MySQL入门 (三) : 运算式与函式
2016-08-31 12:01 4324运算式(expressions)已经 ... -
MySQL入门 (二) : SELECT 基础查询
2016-08-31 11:56 46291 查询资料前的基本概念 1.1 表格、纪录 ... -
MySQL入门 (一) : 资料库概论与MySQL的安装
2016-08-31 11:51 43921. 储存与管理资料 储存与管理资料一直是资讯应用上最基本 ... -
MySQL入门 (九) : 子查询 Subquery
2016-08-30 02:26 43941 一个叙述中的查询叙述 子查询(subquery)是一 ... -
PHP: 用readonly取代disabled来获取input值 submit a disabled input in a form could not ge
2016-08-30 02:21 2645The form is like below; <f ... -
PHP7革新与性能优化
2016-08-30 02:20 2095有幸参与2015年的PHP技 ... -
Mysql: 图解 inner join、left join、right join、full outer join、union、union all的区别
2016-08-18 06:03 3066对于SQL的Join,在学习起来可能是比较乱的。我们知道, ... -
Comet 反Ajax: 基于jQuery与PHP实现Ajax长轮询(LongPoll)
2016-08-18 06:00 1325传统的AJAX轮询方式,客服端以用户定义的时间间隔去服务器上 ... -
PHP:ServerPush (Comet推送) 技术的探讨
2016-08-18 05:58 988PHP中Push(推送)技术的探讨 [http://vi ... -
PHP: 手把手编写自己的 MVC 框架实例教程
2016-08-16 05:33 17591 什么是MVC MVC模式(Model-View-Con ... -
PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)
2016-07-29 12:55 1697原文: PHP5: mysqli 插入, 查询, 更新 ... -
MongoDB 教程索引 (附有视频)
2016-07-27 10:54 691MongoDB 教程索引 MongoDB 教程一: ... -
Node.js 模块之Nimble流程控制
2016-07-18 12:59 1036NodeJS异步的特性有时候 ... -
Node.js web应用模块之Supervisor
2016-07-18 12:56 2280在开发或调试Node.js应 ...
相关推荐
php 设计模式 简单工厂模式
php单例模式php单例模式php单例模式php单例模式
工厂模式,php版本的,学习设计模式写的...
PHP实现的抽象工厂模式,大家可以下载来参考学习下。
设计模式PHP版:简单工厂模式实例。 以计算器的实现为实例,说明了简单工厂模式的实现方法。
PHP实现工厂模式设计日志记录器,客户可通过修改配置文件灵活地改变日志记录方式
1)程序功能:用简单工厂模式实现计算器功能,采用PHP编写。 2)程序详解地址:http://blog.csdn.net/clevercode/article/details/45692995。 3)原创作品,出自"CleverCode的博客",分类为《设计模式之PHP项目应用...
工厂模式,php版本的,学习设计模式写的...
PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)借鉴.pdf
书中首先从OOP 采用的机制—— 抽象类、接口、契约式编程开始讲起,然后介绍了静态方法、单例模式、工厂模式和PHP 6 的新特性等内容,接着介绍了测试和文档方面的内容,还介绍了标准PHP 库SPL 方面的知识以及PHP ...
模式就像是OOP开发人员的配方,每种模式都提供了所需的成分。模式对OOP开发人员尤其有用,因为它有助于创建稳定的API,...本章将介绍两种常用的模式:单例模式和工厂模式。前者被称为类的职责,后者被称为类的多态性。
教程名称:PHP设计模式代码精解(视频 源码)课程目录:【】BroPHP框架(1.0)【】MVC模式中的单态和工厂 6-18 其他资料【】MVC模式中的单态和工厂 6-18 大纲【】MVC模式中的单态和工厂 6-18 课堂代码【】MVC模式中的...
关于简单工厂模式的详细介绍,有需要学习的看看吧。还是那句话,好东西要大家分享,别忘了支持哦。
《PHP设计模式介绍》第三章 工厂模式 《PHP设计模式介绍》第四章 单条模式 《PHP设计模式介绍》第五章 注册模式 《PHP设计模式介绍》第六章 伪对象模式 《PHP设计模式介绍》第七章 策略模式 《PHP设计模式介绍...
书中首先从oop采用的机制——抽象类、接口、契约式编程开始讲起,然后介绍了静态方法、单例模式、工厂模式和php 6的新特性等内容,接着介绍了测试和文档方面的内容,还介绍了标准php库spl方面的知识以及php开发人员...
PHP实现设计模式中的抽象工厂模式详解共7页.pdf.zip
本文介绍的五种PHP应用程序中使用的几种最常见的设计模式。分别是工厂模式,单元素模式,观察者模式,命令链模式,策略模式。本文介绍的仅仅是 PHP 应用程序中使用的几种最常见的设计模式。在设计模式 一书中演示了...
使用PHP实现的面向对象的工厂方法模式。大家可以参考下。