OOP三种设计模式

2018-07-31  本文已影响0人  码课sir

单例模式

<?php
/**
三私一公
*私有的静态属性:保存类的单例
*私有的__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);

工厂模式

<?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

策略模式

<?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);
上一篇 下一篇

猜你喜欢

热点阅读