设计模式

2018-06-25  本文已影响0人  空留灯半盏

设计模式

1 . 单例模式

/**
三私一公
*私有的静态属性:保存类的单例
*私有的__construct():阻止在类的外部实例化
*私有的__clone():阻止在类的外部clone对象
*共有的静态方法:获取类的单例
*/
class MySQLDB {
    private static $instance;   //保存类的单例
    private function __construct() {    //阻止在类的外部实例化
    }
    private function __clone() {    //阻止在类的外部clone对象
    }
    //获取当前类的单例
    public static function getInstance() {
        if(!self::$instance instanceof self)//$instance中保存的不是MySQLDB类的单例就实例化
            self::$instance=new self();
        return self::$instance; //返回单例
    }
}
//测试
$db1=MySQLDB::getInstance();
$db2=MySQLDB::getInstance();
var_dump($db1,$db2);

特点:

1\ 一个类只能有一个对象
2\ 实现三私一共
3\ instanceof:判断对象是否是类数据类型

2 . 工厂模式

特点:

传递不同的参数获取不同的对象
<?php
class ProductsA {
    public function show() {
        echo '商品A<br>';
    }
}
class ProductsB {
    public function show() {
        echo '商品B<br>';
    }
}
//工厂模式
class ProductsFactory {
    public static function create($num) {   //传递不同的参数获取不同的对象
        switch($num) {
            case 1:
                return new ProductsA;
            case 2:
                return new ProductsB;
            default:
                return null;
        }
    }
}
//测试
$obj1= ProductsFactory::create(1);
$obj2= ProductsFactory::create(2);
$obj1->show();      //商品A
$obj2->show();      //商品B

3 . 策略模式

特点:

传递不同的参数,调用不同的方法;
<?php
class Walk {
    public function method() {
        echo '走着去<br>';
    }
}
class Bus {
    public function method() {
        echo '坐车去<br>';
    }
}
class Strategy {
    public function way($obj) { 
        $obj->method(); //传递不同的参数调用不同的方法
    }
}
//测试
$strategy=new Strategy();
$strategy->way(new Walk); //走着去
$strategy->way(new Bus); // 坐车去
上一篇下一篇

猜你喜欢

热点阅读