单例模式#
每次实例化都是同一个对象
- 构造函数必须私有化;
- 通过静态的成员属性来保存实例化后对象;
- 实例化必须通过静态的成员方法来new self.
<?php
class Single
{
static public $link;
//构造函数私有化
private function __construct()
{
return $this->connect();
}
private function connect()
{
return "我已经连接了数据库";
}
//实例化必须通过静态的成员方法来new self
static public function getInstanse()
{
if(self::$link)
{
echo '我刚被调用';
return self::$link;
} else {
echo '我第一';
//通过静态的成员属性来保存实例化后对象
self::$link = new self();
return self::$link;
}
}
}
$obj = Single::getInstanse();
$obj2 = Single::getInstanse();
$obj3 = Single::getInstanse();
if($obj === $obj2)
{
echo '一样';
}else{
echo '不一样';
}
工厂设计模式##
通过编写一个工厂方法来实例化不同的类
正方形
工厂里面的标准就是接口
<?php
interface Shape
{
public function down();
}
class SquareShape implements Shape
{
public function down()
{
echo '正方形的方块在TM的往下掉';
}
}
class RectangleShape implements Shape
{
public function down()
{
echo '矩形的方块在往下掉';
}
}
class ThreeShape implements Shape
{
public function down()
{
echo '三角形往下掉';
}
}
class ShapeFactory
{
public function __construct()
{
}
static public function create($name)
{
$name = $name.'Shape';
return new $name();
}
}
$shape_array = ['Square','Rectangle', 'Three'];
$rand = mt_rand(0, count($shape_array)-1);
$obj = ShapeFactory::create($shape_array[$rand]);
$obj->down();
网友评论