PHP中的设计模式

2017-11-13  本文已影响0人  8d2855a6c5d0

单例模式

/*
*单例模式:一个类只能有一个对象
*三私一公
*/
class MySQLDB {
    //私有的成员用来保存类的实例
    private static $instance;
    //私有的构造函数阻止在类的外部实例化          
    private function __construct() {    
    }
    //私有的__clone()阻止clone对象
    private function __clone() {        
    }
    //公有的方法用来获取类的实例
    public static function getInstance() {  
        if(!self::$instance instanceof self )
            self::$instance=new self;
        return self::$instance;
    }
}
$db1=MySQLDB::getInstance();
$db2=MySQLDB::getInstance();
var_dump($db1,$db2);

项目层面的单例应用,实例化多个数据库模型

class DB1 {
}
class DB2 {
}
class DB3 {
}

function getInstance($db_name)
{
    static $array = array();
    if(!isset($array[$db_name])) {
        $array[$db_name] = new $db_name;
    }
    return  $array[$db_name];
}

工厂模式

传递不同的参数,获得不同的对象

abstract class Product {
    abstract public function getName();
}
class ProductA extends Product  {
    public function getName() {
        echo '这是A商品<br>';
    }
}
class ProductB extends Product {
    public function getName() {
        echo '这是B商品<br>';
    }
}
//工厂模式
class ProductFactory {
    public static function create($num) {
        switch($num) {
            case 1:
                return new ProductA();
            case 2:
                return new ProductB();
        }
        return null;
    }
}
//传递不同的参数获取不同的对象
$obj=ProductFactory::create(1);
$obj->getName();    //这是A商品
$obj=ProductFactory::create(2);
$obj->getName();    //这是B商品

策略模式

传递不同的参数,调用不同的策略(方法)

interface IStrategy {
    function ontheway();
}
class Walk implements IStrategy {
    public function ontheway() {
        echo '走着去<br>';
    }
}
class Bick implements IStrategy {
    public function ontheway() {
        echo '骑自行车去<br>';
    }
}
class Bus implements IStrategy {
    public function ontheway() {
        echo '坐巴士去<br>';
    }   
}
//策略模式,传递不同的参数,调用不同的策略
class Strategy{
    public function getWay(IStrategy $obj) {
        $obj->ontheway();
    }
}
$obj=new Strategy();
$obj->getWay(new Walk);     //走着去
$obj->getWay(new Bick);     //骑自行车去
$obj->getWay(new Bus);      //坐巴士去
上一篇下一篇

猜你喜欢

热点阅读