- 浏览: 13746640 次
- 性别:
- 来自: 洛杉矶
文章分类
- 全部博客 (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 7185最终实例在下方 以前 ... -
MySQL入门 (七) : 储存引擎与资料型态
2016-09-03 07:49 45641 表格与储存引擎 表格(table)是资料库中用来储存 ... -
MySQL入门 (六) : 字元集与资料库
2016-09-03 07:47 45761 Character Set与Collation 任何 ... -
MySQL入门 (五) : CRUD 与资料维护
2016-09-03 07:46 54881 取得表格资讯 1.1 DESCRIBE指令 「 ... -
MySQL入门 (四) : JOIN 与UNION 查询
2016-09-03 07:42 45121 使用多个表格 在「world」资料库的「countr ... -
PHP: 关键字global 和 超全局变量$GLOBALS的用法、解释、区别
2016-08-31 12:07 5046$GLOBALS 是一个关联数组,每一个变量为一个 ... -
MySQL入门 (三) : 运算式与函式
2016-08-31 12:01 4392运算式(expressions)已经 ... -
MySQL入门 (二) : SELECT 基础查询
2016-08-31 11:56 46901 查询资料前的基本概念 1.1 表格、纪录 ... -
MySQL入门 (一) : 资料库概论与MySQL的安装
2016-08-31 11:51 44691. 储存与管理资料 储存与管理资料一直是资讯应用上最基本 ... -
MySQL入门 (九) : 子查询 Subquery
2016-08-30 02:26 44541 一个叙述中的查询叙述 子查询(subquery)是一 ... -
PHP: 用readonly取代disabled来获取input值 submit a disabled input in a form could not ge
2016-08-30 02:21 2718The form is like below; <f ... -
PHP7革新与性能优化
2016-08-30 02:20 2155有幸参与2015年的PHP技 ... -
Mysql: 图解 inner join、left join、right join、full outer join、union、union all的区别
2016-08-18 06:03 3131对于SQL的Join,在学习起来可能是比较乱的。我们知道, ... -
Comet 反Ajax: 基于jQuery与PHP实现Ajax长轮询(LongPoll)
2016-08-18 06:00 1386传统的AJAX轮询方式,客服端以用户定义的时间间隔去服务器上 ... -
PHP:ServerPush (Comet推送) 技术的探讨
2016-08-18 05:58 1047PHP中Push(推送)技术的探讨 [http://vi ... -
PHP: 手把手编写自己的 MVC 框架实例教程
2016-08-16 05:33 18221 什么是MVC MVC模式(Model-View-Con ... -
PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)
2016-07-29 12:55 1760原文: PHP5: mysqli 插入, 查询, 更新 ... -
MongoDB 教程索引 (附有视频)
2016-07-27 10:54 755MongoDB 教程索引 MongoDB 教程一: ... -
Node.js 模块之Nimble流程控制
2016-07-18 12:59 1087NodeJS异步的特性有时候 ... -
Node.js web应用模块之Supervisor
2016-07-18 12:56 2335在开发或调试Node.js应 ...
相关推荐
在工厂模式中,当创建对象时,不会直接实例化对象,而是通过一个专门的工厂类来创建。工厂类可以根据提供的参数来决定创建哪种类型的实例。 在 PHP 中,工厂模式的实现通常包括以下步骤: 1. 定义一个接口或抽象类...
工厂模式是一种常用的设计模式,它在软件工程中用于创建对象,提供了一种封装产品创建的方式。在PHP中,工厂模式的应用同样广泛,特别是在需要动态决定实例化哪个类或者需要隔离类与实例化过程的情况下。本篇文章将...
简单工厂模式是软件设计模式中的一种,它在PHP编程中被广泛使用,特别是在处理对象创建时需要根据条件或参数动态选择具体类的情况。这个模式的主要目的是为了封装对象的创建过程,使得客户端代码无需关心具体对象的...
在软件设计模式中,工厂模式是一种常用的创建型模式,它提供了一种创建对象的最佳方式。在PHP中,工厂模式能够帮助我们解耦代码,使得代码更具有灵活性和可扩展性。在这个例子中,我们将深入探讨如何使用工厂模式来...
在 PHP 中,可以使用静态工厂方法来实现简单工厂模式。 在使用简单工厂模式时,需要注意以下几点: * 需要定义一个工厂接口,用于声明创建对象的方法。 * 需要实现多个具体的工厂类,每个类都实现了工厂接口。 * ...
在PHP中,工厂模式可以用来抽象产品创建过程,使得更换或扩展产品变得更加容易。 3. **抽象工厂模式**:这是一种更高级别的工厂模式,它可以创建一系列相关的或者相互依赖的对象,而无需指定它们的具体类。 4. **...
简单工厂模式是软件设计模式中的一种,它属于创建型模式,主要用来解决对象的创建问题。在PHP中,我们可以利用这种模式来简化对象的实例化过程,减少代码的耦合度,提高代码的可维护性。 简单工厂模式的核心思想是...
在PHP中,抽象工厂模式尤其适用于那些需要创建一系列相关或相互依赖的对象,而又不希望硬编码具体类名的情况。通过这种方式,抽象工厂模式能够将对象的创建过程与使用过程分离,提高代码的可扩展性和可维护性。 ...
在PHP中,工厂模式可以用来解耦对象的创建和使用,使得更换或扩展产品类型变得更加容易。工厂类负责创建对象,客户端只需要知道工厂,无需关心具体的产品实现。 接下来是策略模式,它定义了一系列算法,并将每个...
简单工厂模式是一种创建型设计模式,它提供了一个创建对象的接口,但...在Sunny软件公司的图表库场景中,采用简单工厂模式可以显著改善代码结构,提高代码的可读性和可维护性,同时降低类之间的耦合度,便于未来扩展。
在本书中,读者将会学习到如何使用不同的设计模式来解决PHP程序设计中遇到的问题,比如如何使用工厂模式来实现依赖注入,或者如何利用单例模式确保在应用程序中只有一个数据库连接实例。此外,书中可能会通过实例来...
在软件设计模式中,工厂模式和单例模式是两种非常基础且重要的模式,它们都是用于解决对象创建问题,但有着不同的设计理念和应用场景。本篇文章将深入探讨这两种模式,并结合具体的代码示例`myFactoryDemo`进行讲解...
PHP实现的抽象工厂模式,大家可以下载来参考学习下。
以上只是PHP设计模式中的一部分,每种模式都有其独特的应用场景和价值。通过学习和掌握这些设计模式,开发者可以更好地设计和重构代码,提高软件的灵活性、可读性和可维护性。在实际开发过程中,应根据项目的具体...
设计模式是软件工程中的最佳实践,它们是解决常见问题的经验总结,使得代码更加模块化、可复用,并能应对复杂系统的设计挑战。 设计模式分为三大类:创建型、结构型和行为型。创建型模式关注对象的创建过程,如单例...
以上只是PHP设计模式中的一部分,每种模式都有其适用的场景和价值。通过学习和应用这些设计模式,开发者可以写出更高效、更具扩展性和易于维护的代码。在实际项目中,根据需求灵活选择和组合设计模式,可以显著提高...
例如,工厂模式、单例模式、观察者模式等,都是在PHP开发中经常用到的设计模式。通过理解这些模式,开发者可以写出更灵活、可扩展的代码,并且能够更好地与其他开发者协作。 再者,“框架”章节会介绍一些流行的PHP...
在PHP中,事件驱动编程常常使用观察者模式。 5. 建造者模式:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。在PHP中,建造者模式可用于复杂对象的构造,如用户配置或数据库查询构造。 ...
在工厂模式中,创建对象的实例的任务被委托给专门的工厂类。 5. 观察者模式(Observer):观察者模式定义了对象之间的一对多依赖关系,当一个对象改变状态时,所有依赖于它的对象都会收到通知并自动更新。在PHP开发...