菜单

面向对象设计模式中之单例模式以及厂模式

2018年11月16日 - Php
单利模式的核心点在于只能生成1个对象,并且是由类中的静态变量保存。

以下代码来自《深入PHP 面向对象、模式与实践》(第三版)第9章

/**
 * Created by PhpStorm.
 * User: Eilen
 * Date: 2018/8/31
 * Time: 22:48
 */

class Preferences
{
    private $props = array();
    private static $instance;

    private function __construct(){}

    /**
     * 获取单例模式对象
     * @return mixed
     */
    public static function getInstance()
    {
        if (empty(self::$instance)){
            self::$instance = new Preferences();
        }
        return self::$instance;
    }

    /**
     * 接收对象的参数,并且赋值
     * @param $key
     * @param $val
     */
    public function setProperty($key, $val)
    {
        $this->props[$key] = $val;
    }

    public function getProperty($key)
    {
        return $this->props[$key];
    }
}

//引用单例模式

$pref = Preferences::getInstance();
$pref->setProperty('name', 'matt');

unset($pref);

$pref2 = Preferences::getInstance();
print $pref2->getProperty('name');

var_dump($a);*/

//工厂模式(造类的时段尤其有益于)
/*class YunSuan
{
public $a;
public $b;

function Suan()
{
}
}

/*$j = new Cheng();
$j->Suan();
*/

//设计模式(不同的景象下转移不同之类似)
//1.单例模式(只能往一个靶)
//类的计划生育
//1.受该类在外场无法前去对象
//2.深受外界得以往一个对象,做一个静态方法返回对象
//3.每当看似中通过静态变量支配返回对象只能是一个

$b = Dog::DuiXiang();//因为归的凡团结,所以$a 与$b 相同
$b->test=”hello”;

return self::$dx;
}
}

class Cheng extends YuanSuan
{
function Suan()
{
return $this->a*$this->b;
}
}

/*class Dog
{
static $dx;
public $test;

class Jia extends YuanSuan
{
function Suan()
{
return $this->a+$this->b;
}
}

function Jia()
{
return $a+$b;
}
function Jian()
{
return $a-$b;
}
}*/

}

if(empty(self::$dx))
{
self::$dx = new Dog();
}

static function DuiXiang()
{
//return new Dog();

class Jian extends YuanSuan
{
function Suan()
{
return $this->a-$this->b;
}
}

$r = GongChang::ShengChan(“*”);//类名::静态方法
$r->a=10;
$r->b=5;
echo $r->Suan();

class GongChang
{
static function ShengChan($f)
{
switch($f)
{
case “+”:
return new Jia();
break;
case “-“:
return new Jian();
break;
case “*”:
return new Cheng();
break;
}
}
}

abstract class YuanSuan
{
public $a;
public $b;

private function __construct()
{

$a = Dog::DuiXiang();//调用静态方法

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图