本文目录一览:
- 1、什么是PHP中的工厂设计模式
- 2、PHP工厂模式怎样将数据库的结果集实例化
- 3、php设计模式: 请写出工厂模式和单态模式的PHP5示例代码
- 4、谁能解释一下PHP的工厂模式?
- 5、php设计模式之简单工厂模式~呢?
- 6、PHP怎么实现工厂模式?
什么是PHP中的工厂设计模式
工厂模式分为三种:简单工厂、工厂方法、抽象工厂 ,三种工厂的区别是,抽象工厂由多条产品线,而工厂方法只有一条产品线,是抽象工厂的简化。而工厂方法和简单工厂相对,大家初看起来好像工厂方法增加了许多代码但是实现的功能和简单工厂一样。但本质是,简单工厂并未严格遵循设计模式的开闭原则,当需要增加新产品时也需要修改工厂代码。但是工厂方法则严格遵守开闭原则,模式只负责抽象工厂接口,具体工厂交给客户去扩展。在分工时,核心工程师负责抽象工厂和抽象产品的定义,业务工程师负责具体工厂和具体产品的实现。只要抽象层设计的好,框架就是非常稳定的。
PHP工厂模式怎样将数据库的结果集实例化
其实设计模式真的是一套解决方案而已,所以千万不要对设计模式进行不理解的死记硬背,一定要理解为什么要用这种设计模式,它一般实际应用在项目哪里,如果你不这样做,永远都不会理解设计模式的奥妙之处。为了可以清晰的了解到什么是简单工厂模式,简单工厂模式应用在哪里。我们首先从具体实例开始讲起。
一、问题的出现。
平时大家在一些开源的cms中,经常会碰到切换数据库链接方式或者切换数据库类型的例子,例如你可以选择mysql的,mysqli,pdo的。或者oracle的。每切换一次,就意味着需要生成所选择的数据库的链接对象。那么我们如何去实现这样的对象生成和切换呢?
并且在代码中,我只希望,我传一个mysql,然后就可以使用mysql这个类对象,传一个pdo,就可以pdo这个类对象,如下:
$db_object=db_factory::get_instance('pdo');//这里你想换哪个数据库,就填哪个,例如mysql,mysqli,pdo
二、如何解决
这个时候简单工厂这种方法就可以发挥作用了。
那么我们可以创建一个工厂类,为什么叫工厂,因为工厂是用来生产产品的,而这些产品就是对象。所以有下面对应关系
数据库工厂===》db_factory类
各个数据库链接对象=====》在db_factory中生产出来的对象,注意不是生产db_factory类的对象。
这个里可能比较难理解,db_factory类中工厂是通过switch来切换获取对象的。在下面给出的代码中请慢慢理解
三、概念
简单工厂模式:用于产生对象(进行对象切换)的方法,既然叫简单,那么肯定还有其他复杂点的工厂模式,例如抽象工厂模式,工厂方法模式。
四、如何实现单利模式。
算法:
1、建立一个工厂类,实例化这个工厂类后用这个类的其中一个方法获取所需的数据库链接对象
2、在工厂类中建立一个getDbObject的方法用于获取数据库链接对象。
3、在getDbObject方法中,传入一个数据库链接类型的参数,通过switch来切换类型,根据类型返回不同的数据库链接对象
五、代码实现:
下面对象中既使用了单利模式也使用了简单工厂模式
?php
002
003 /**************db_factory.class.php****************/
004 class db_factory{
005 static private $instance=null;
006
007
008 private function __construct(){
009
010 }
011
012 static public function get_instance($db_type='mysql'){
013 if(self::$instance==null){
014 self::$instance=new self();
015 }
016 $db_factory=self::$instance;
017 return $db_factory-getDbObject($db_type);
018 }
019
020 protected function getDbObject($db_type){
021 switch($db_type){
022 case 'mysql':
023 $obj=getMysql::get_instance();
024 break;
025 case 'mysqli':
026 $obj=getMysqli::get_instance();
027 break;
028 case 'pdo':
029 $obj=getPdo::get_instance();
030 break;
031 default :
032 $obj=getMysql::get_instance();
033 }
034 return $obj;
035 }
036 }
037
038 /**************getMysql.class.php****************/
039 class getMysql{
040 static private $instance=null;
041
042 private function __construct(){
043 }
044
045 static public function get_instance(){
046 if(self::$instance==null){
047 self::$instance=new self();
048 }
049 return self::$instance;
050 }
051
052 function select(){
053 echo 'mysql获取数据';
054 }
055 }
056
057 /**************getMysqli.class.php****************/
058 class getMysqli{
059 static private $instance=null;
060
061 private function __construct(){
062 }
063
064 static public function get_instance(){
065 if(self::$instance==null){
066 self::$instance=new self();
067 }
068 return self::$instance;
069 }
070
071 function select(){
072 echo 'mysqli获取数据';
073 }
074 }
075
076 /**************getPdo.class.php****************/
077 class getPdo{
078 static private $instance=null;
079
080 private function __construct(){
081 }
082
083 static public function get_instance(){
084 if(self::$instance==null){
085 self::$instance=new self();
086 }
087 return self::$instance;
088 }
089
090 function select(){
091 echo 'pdo获取数据';
092 }
093 }
094
095
096
097
098
099
100
101 /**************客户端调用****************/
102 $db_object=db_factory::get_instance('pdo');//这里你想换哪个数据库,就填哪个,例如mysql,mysqli,pdo
103 $db_object-select();
104
105
106
107 ?
五、应用:在需要到对象的切换时可以考虑这种模式,但是对象的切换数最好不要超过10,多了之后这种方法的弊端就会显现,会变得很累赘。
php设计模式: 请写出工厂模式和单态模式的PHP5示例代码
Example #1 调用工厂方法(带参数)
?php
class Example
{
// The parameterized factory method
public static function factory($type)
{
if (include_once 'Drivers/' . $type . '.php') {
$classname = 'Driver_' . $type;
return new $classname;
} else {
throw new Exception ('Driver not found');
}
}
}
?
------------------------------------
Example #2 单例模式
?php
class Example
{
// 保存类实例在此属性中
private static $instance;
// 构造方法声明为private,防止直接创建对象
private function __construct()
{
echo 'I am constructed';
}
// singleton 方法
public static function singleton()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
// Example类中的普通方法
public function bark()
{
echo 'Woof!';
}
// 阻止用户复制对象实例
public function __clone()
{
trigger_error('Clone is not allowed.', E_USER_ERROR);
}
}
?
谁能解释一下PHP的工厂模式?
工厂模式是程序设计模式的一种。
一般是在某个基础类上创建一个静态方法,根据参数来生成某个子类。这个方法,称为工厂方法。
类比到现实,就像一个工厂,包含几种产品,会根据客户的订单需求生产出指定的产品供客户使用。
最简单的用法:
class Pizza{
public $price;
public static function factory($type)
{
if($type=='veget'){
return new VegetPizza();
}elseif($type=='fruit'){
return new FruitPizza();
}
}
}
class VegetPizze extends Pizza{
}
class FruitPizze extends Pizza{
}
大概逻辑是这样的,具体实现上有好几种写法,你可以搜索设计模式深入了解一五
php设计模式之简单工厂模式~呢?
这个问题有些模糊 我在多个点解释下1.运行环境 .NET 是微软的产品 理论上只能在windows 下运行 跨平台很差 PHP 可以再 Windows 和 Linux 上运行 跨平台很好2.学习成本 PHP 弱类型语言(松散型),简单,容易上手 .NET 我最早是做.NET 的 .NET 学习成本较高 时间较长3.运行效率 这个仁者见仁智者见智 主要看开发人员的水平了。不过现在 很多网站 都使用 PHP MYSQL Apache 的组合来开发 因为成本低就是这样的了,建议你还去后盾人学习一下,那里都是专家手把手教你
PHP怎么实现工厂模式?
?php
/**
* 单例模式和工厂模式
*
* 保证一个类仅有一个实例,并提供一个访问它的全局访问点
*
*/
class Singleton
{
static private $_instance = null;
private function __construct()
{
}
static public function getInstance($class='')
{
if(empty($class)){
if(is_null(self::$_instance)) {
self::$_instance = new Singleton();
}
return self::$_instance;
}else{
static $class_object=array();
if(empty($class_object[$class])){
include dirname(__FILE__).'/includes/classes/'.$class.'.class.php';
$class_object[$class]=new $class();
}
return $class_object[$class];
}
}
public function display()
{
echo "it is a singlton class function";
}
}
// $obj = new Singleton(); // 声明不能成功
$obj = Singleton::getInstance();
var_dump($obj);
$obj-display();
$obj1 = Singleton::getInstance();
var_dump(($obj === $obj1));