初探PHP设计模式
设计模式不是一套具体的语言框架,是行之有效的编码规范,是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。合理使用设计模式将有助于初学者更加深入地理解面向对象思维。
一、三大基本模式
1、工厂模式
工厂模式分为简单工厂模式,工厂模式,抽象工厂模式,今天主要讲简单工厂模式。通过定义好的工厂方法或者类生成对象,而不是在代码中直接new 一个类来生成对象。使用工厂模式,可以避免当改变某个类的名字或者方法之后,在调用这个类的所有的代码中都修改它的名字或者参数。
声明一个初始类
class DataBase { public function __construct() { echo __CLASS__; } }
创建一个工厂类,写一个工厂方法
class Factory { static function creatDataBase() { $db = new DataBase(); return $db; } }
再在需要调用初始类的php代码处使用工厂类
spl_autoload_register(‘autoload1‘); $db = SPL\Factory::creatDataBase(); function autoload1($class) { $dir = __DIR__; $requireFile = $dir . "\\" . $class . ".php"; require $requireFile; }
之后如果要修改初始类的信息,如名称,就可以直接修改与之对应的工厂类中的代码。
结果如下:
2、单例模式
在应用程序执行的时候,只能获得一个对象实例。主要是为了防止对资源的浪费,就比如数据库类的连接方法,普通情况下,多个类使用数据库就需要创建多个数据库对象,而实际情况数据库的对象只需要创建一次就可以在不同类中使用。
单例模式的要求:
1,不允许从外部调用以防止创建多个对象,需要将构造函数和析构函数必须声明为私有。
2,防止实例被克隆,这会创建对象的副本,需要将clone方法声明为私有
3,只有getInstance()方法为公有的。
namespace SPL; class Singleton { private static $instance; private static $num = 0; private function __construct() { echo "创建次数:", self::$num + 1; } /*只有第一次调用时声明类获取实例*/ private function __destruct() { } private function __clone() { } public static function getInstance() { if (self::$instance == null) { self::$instance = new self(); } return self::$instance; } }
调用:
$db=SPL\Singleton::getInstance(); $db=SPL\Singleton::getInstance(); $db=SPL\Singleton::getInstance();
结果如下:
3、注册模式
之前已经创建好的对象,可以储存在到某个全局可以使用的对象树上,在需要使用的时候,直接从该对象树上获取即可,并且任何地方直接去访问。通过工厂模式和单例模式创建对象,而使用注册模式去更好的使用对象。注册模式常常和工厂模式一起使用。
namespace SPL; class Register { protected static $object; public static function set($alias,$object){ self::$object[$alias]=$object; } public static function get($alias) { return self::$object[$alias]; } public static function _unset($alias) { unset(self::$object[$alias]); } }
在工厂模式初始化的时候,将对象注册进去
温馨提示: 本文由杰米博客推荐,转载请保留链接: https://www.jmwww.net/file/web/10212.html