1.單例模式
class只能new一次,禁止克隆
class single{
//創建靜態私有的變量保存該類對象
static private $instance;
//參數
private $config;
//防止直接創建對象
private function __construct($config){
$this -> config = $config;
echo "我被實例化了";
}
//防止克隆對象
private function __clone(){
}
static public function getInstance($config){
//判斷$instance是否是Uni的對象
//沒有則創建
if (!self::$instance instanceof self) {
self::$instance = new self($config);
}
return self::$instance;
}
public function getName(){
$this->config ++;
echo $this -> config;
}
}
$db1 = single::getInstance(1);
$db1 -> getName();
echo PHP_EOL;
$db2 = single::getInstance(4);
$db2 -> getName();
2.原型模式,複製對象,針對大對象使用,減少new對象的開銷
class Canvas{
public function init(){
echo '初始化';
}
public function draw(){
echo '開始畫畫';
}
}
$canvas = new Canvas();
$canvas->init();
$canvas->draw();
$canvas1 = clone $canvas;
$canvas->init();
$canvas->draw();
3.註冊器模式,解決全局共享問題
class Register{
protected static $objects;
public function set($name,$object){
self::$objects[$name] = $object;
}
static function get($name) {
return self::$objects[$name];
}
public function _unset($name){
unset(self::$objects[$name]);
}
}
$r = new Register();
$r->set('name','往裏');
$r->set('age',19);
$age = Register::get('age');
echo $age;
4.工廠模式,由工廠類複雜生成對象
interface shape{ public function draw(); }
class Circle implements shape{
public function draw()
{
echo 'draw circle';
// TODO: Implement draw() method.
}
}
class Square implements shape{
public function draw()
{
echo 'draw square';
// TODO: Implement draw() method.
}
}
class factory {
public function getShape($shapeType){
if(empty($shapeType)) {
return null;
}
if($shapeType == 'circle') {
return new Circle();
}elseif($shapeType == 'square'){
return new Square();
}
return null;
}
}
$factory = new factory();
$shape = $factory->getShape('circle');
$shape->draw();
$shape = $factory->getShape('square');
$shape->draw();