php工厂模式和单例模式,php设计模式中工厂模式和单例模式的区别

//让该类在外界无法造对象

//让外界可以造一个对象,做一个静态方法返回对象

//在类里面通过让静态变量控制返回对象只能是一个。

单例模式的要点有三个:一是某个类只能有一个实例;

二是它必须自行创建这个实例;

三是它必须自行向整个系统提供这个实例。

为什么要使用PHP单例模式1. php的应用主要在于数据库应用, 一个应用中会存在大量的数据库操作, 在使用面向对象的方式开发时, 如果使用单例模式, 则可以避免大量的new 操作消耗的资源,还可以减少数据库连接这样就不容易出现 too many connections情况。

2. 如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现. 这个可以参看zend Framework的FrontController部分。

3. 在一次页面请求中, 便于进行调试, 因为所有的代码(例如数据库操作类db)都集中在一个类中, 我们可以在类中设置钩子, 输出日志,从而避免到处var_dump, echo。class cat

{

public $name;

private function __construct()

{

}

static $temp;

static function new_ob()

{

if(empty(self::$temp)){

self::$temp = new cat();

}

return self::$temp;

}

function speak(){

return "喵喵喵";

}

}

//$mao = new cat();

//如果没有猫就造一个,然后等于新的xxx,如果有,直接等于。达到限制的目的。

//$mao;

//if (empty($mao)){

// $mao = new cat();

//}

// $xxx = $mao;

$mao = cat::new_ob();

$mao2 = cat::new_ob();

//给1猫改名字,2猫的名字输出为1猫改的名字。此为单例。

$mao->name = "py";

2.简单工厂模式①抽象基类:类中定义抽象一些方法,用以在子类中实现

②继承自抽象基类的子类:实现基类中的抽象方法

③工厂类:用以实例化所有相对应的子类abstract class jsq

{

public $a;

public $b;

function yunsuan(){

}

}

//此为拓展

class jiafa extends jsq

{

function yunsuan()

{

//parent::yunsuan(); // TODO: Change the autogenerated stub

return $this ->a+$this->b;

}

}

class jianfa extends jsq

{

function yuansuan(){

return $this->a-$this->b;

}

}

class factory

{

static function create($x){

switch ($x){

case "+":

return new jiafa();

break;

case "-":

return new jianfa();

break;

}

}

}

//$j1 = new jiafa();

//$j1->a = 1;

//$j1->b = 2;

//$j1->yunsuan();

//尽量避免实例化对象,采用静态方法获取。

$jf = factory::create("+");

$jf->a = 1;

$jf->b = 2;

echo $jf->yunsuan();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值