设计模式
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); // 坐车去