>>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 中使用工厂模式相关推荐

  1. 第09课:生活中的工厂模式——你要拿铁还是摩卡

    用程序来模拟生活 从剧情中思考工厂模式 工厂模式的模型抽象 类图 模型说明 简单工厂的优点 简单工厂的缺点 模型的拓展应用 应用场景 [拓展]工厂三姐妹 简单工厂模式 工厂方法模式 抽象工厂模式 进一 ...

  2. java中的工厂_java中的工厂模式

    1.工厂模式 java中的工厂模式,个人理解是:要想制作一个汽车,则必须有轮子,发动机,座椅等. 1.创建一个接口,并且使得轮子,发动机,座椅三个实现类实现这个接口. 2.创建一个工厂,生成基于给定信 ...

  3. java中的工厂模式

    一.工厂模式介绍 工厂模式专门负责将大量有共同接口的类实例化.工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类. 工厂模式的几种形态: (1)简单工厂(Simple Factor ...

  4. java中的工厂模式_深入理解Java的三种工厂模式

    一.简单工厂模式 简单工厂的定义:提供一个创建对象实例的功能,而无须关心其具体实现.被创建实例的类型可以是接口.抽象类,也可以是具体的类 实现汽车接口 奔驰类 宝马类 简单工厂,既能生产宝马又能生产奔 ...

  5. java中的工厂模式_java中工厂模式详解和使用方法

    工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻 ...

  6. 理解设计模式中的工厂模式

    在理解设计模式中的单例模式一文中介绍了创建型模式中最为简单的一种:单例模式,并推荐了几种可以在实际生产中使用的线程安全的形式.本文将继续介绍创建型模式中的工厂方法模式和抽象工厂模式,同样使用代码和类图 ...

  7. 百度apollo源码学习(二)apollo中的工厂模式

    文章目录 一.什么是工厂 二. 简单工厂模式 UML类图 简单工厂模式结构 代码 一.定义抽象产品类AbstractProduct 二.定义具体产品类 三.定义工厂类和工厂方法 应用 扩展 一.扩展具 ...

  8. 带你一次性搞懂软件构造中的工厂模式

    什么是工厂方法 众所周知,对象的方法大致可以分为 Creator.Producer.Observer.Mutator 四类.其中的 Creator 是创建一个新的实例,静态 Creator 方法一般称 ...

  9. 胡博君解Java中简单工厂模式

    为什么要用简单工厂模式: 我们都知道程序是分开的,客户端中有程序,服务器端有程序,一般来说我们写的main方法中的程序都是在客户端电脑中的,按照我们学习的时候喜欢的写法: //一般来说这个程序都是在客 ...

最新文章

  1. 我同事说我写代码像写诗
  2. MySql General error:2006
  3. hdu 4679 树的直径
  4. Discuz 升级X3问题汇总整理
  5. C++ STL string迭代器的使用
  6. 40-400-035-运维-优化-pt-variable-advisor优化工具
  7. rust怎么用items刷东西_rust服主怎么刷东西 | 手游网游页游攻略大全
  8. Linux之df命令
  9. 浏览器cookie那些事儿
  10. php filtervar函数用法,PHP过滤器 filter_has_var() 函数用法实例分析
  11. 根据某一字段值去重查找出所有字段的数据
  12. 今天解决了首页无头像被显示的问题
  13. javac编译带有package的java文件
  14. sai文字图层、钢笔图层如何转普通图层
  15. 20220525商汤算法岗实习面试经历
  16. java.lang.IllegalArgumentException 如何解决这个异常
  17. sql语句分类(附mysql实操语句)
  18. 视频监控远程传输方案
  19. 经常打电话的人用什么耳机好?通话质量好的蓝牙耳机推荐
  20. IT职业规划:大公司VS小公司,怎样选择更有前途?

热门文章

  1. 信息学奥赛C++语言:斐波那契第n项
  2. python中浮点数类型_Python基本数据类型之浮点型
  3. CUDA 网格级并发-流(2)
  4. [Unity] FlowCanvas 使用注意事项
  5. [Unity][FlowCanvas] FlowScript 搜索功能不可用的解决办法:更新 UnityEditor 的版本
  6. layui表格使用:经验总结(含案例、代码、截图)
  7. css文字排列 - 代码篇
  8. phpcmsV9各种模板页面调用文章 hits 点击量和评论量 - 代码总结分类
  9. 电影网址导航V20201218版源码
  10. 百度SEO网页背景渐变色代码