php单例模式和工厂模式
Posted 梦深深处
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php单例模式和工厂模式相关的知识,希望对你有一定的参考价值。
一、单例模式
一个类只能实例化一个对象
class Ren
{
private static $dx; //用来存储生成的对象,静态方法调用静态成员
public $name;
//私有的构造函数
private function __construct()
{
}
//生成对象的方法
public static function DuiXiang()
{
if(empty(self::$dx))//判断是否为空,如果空,则new一个新的对象
{
self::$dx = new Ren();
}
return self::$dx;
}
}
$r = Ren::DuiXiang();
$r->name = "张三";
$r1 = Ren::DuiXiang();
var_dump($r1);
二、工厂模式
第一种方式: 安全性不高
class suan
{
public $a;
public $b;
function jia()
{
return $this->a+$this->b;
}
function jian()
{
return $this->a-$this->b;
}
}
$s=new suan();
$s->a=10;
$s->b=5;
echo $s->jia();
第二种方式:可拓展性强
class YunSuan
{
public $a;
public $b;
function Suan()
{
}
}
class Jia extends YunSuan
{
function Suan()
{
return $this->a+$this->b;
}
}
class Jian extends YunSuan
{
function Suan()
{
return $this->a-$this->b;
}
}
$s = new Jia();
$s->a=10;
$s->b=5;
echo $s->Suan();
第三种方式:工厂模式
目的:解决第二种方式的缺点:当有很多子类时,方法名可能会重,从而通过运算符的不同来确定不同的对象
class YunSuan
{
public $a;
public $b;
function Suan()
{
}
}
class Jia extends YunSuan
{
function Suan()
{
return $this->a+$this->b;
}
}
class Jian extends YunSuan
{
function Suan()
{
return $this->a-$this->b;
}
} //到此为止与第二种方式一样 ;目的是解决当有很多子类时,方法名可能会重,从而通过运算符的不同来确定不同的类
class GongChang
{
static function ShengChan($f)
{
switch($f)
{
case "+":
return new Jia();
break;
case "-":
return new Jian();
break;
}
}
}
$r = GongChang::ShengChan("-");
$r->a=10;
$r->b=5;
echo $r->Suan();
以上是关于php单例模式和工厂模式的主要内容,如果未能解决你的问题,请参考以下文章
PHP面向对象-设计模式 单例模式 简单工厂模式 工厂方法模式