码迷,mamicode.com
首页 > Web开发 > 详细

php单例模式与工厂模式

时间:2017-02-16 22:54:56      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:class   yun   执行   mic   new   php   并且   code   private   

单例模式:
单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的。

所有的单例模式至少拥有以下三种公共元素:
1. 它们必须拥有一个构造函数,并且必须被标记为private
2. 它们拥有一个保存类的实例的静态成员变量
3. 它们拥有一个访问这个实例的公共的静态方法

代码:

<?php
class ren
{
    public $name;
    private static $dx;//存储对象
//声明一个私有的实例变量
    private function __construct()//声明私有构造方法为了防止外部代码使用new来创建对象。
    {}
    public static function duixiang()
    {
        if(empty(self::$dx))//self关键字调用静态类;静态方法不需要实例化直接调用类->方法
        {//声明一个dx()静态方法,用于检测是否有实例对象
            self::$dx =  new ren();
        }
        return self::$dx;
    }
}
//$shili=new ren();//报错
//$shishi=new ren();
//两者不同
$r= ren::duixiang();

$r->name = "xxx";
var_dump($r);
$r1 = ren::duixiang();
var_dump($r1);

?>

工厂模式:

工厂模式就是一种类,具有为您创建对象的某些方法,这样就可以使用工厂类创建对象,而不直接使用new。这样如果想更改创建的对象类型,只需更改该工厂即可。

看代码:

这是一个普通的类,里面有一些方法

<?php
class yun
{
    public $a;
    public $b;
    function suan()
    {
        echo "运算";
    }
}
class jia extends yun//继承yun
{
    function suan()//重写
    {
        return $this->a+$this->b;
    }
}
class jian extends yun
{
    function suan()
    {
        return $this->a-$this->b;
    }
}
class cheng extends yun
{
    function suan()
    {
        return $this->a*$this->b;
    }
}
?>

 

然后写一个工厂类

<?php
class gongchang
{
    static function chanpin($name)
        //给一个参数,返回一个对象
    {
        switch ($name){
            case"+":
//表达式的值与结构中每个 case 的值进行比较。如果存在匹配,则执行与 case 关联的代码
                return new jia();
                break;
            case"-":
                return new jian();
                break;
            case"*":
                return new jia();
                break;

        }
    }
}
$aa = gongchang::chanpin("+");
//此处找到与+相匹配的方法
//给一个“*”的参数,给我返回一个类
var_dump($aa);
?>

 

php单例模式与工厂模式

标签:class   yun   执行   mic   new   php   并且   code   private   

原文地址:http://www.cnblogs.com/xuan584521/p/6407201.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!