設計模式

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();




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章