当前位置:首页 > Web开发 > 正文

初探PHP设计模式

11-11 Web开发

设计模式不是一套具体的语言框架,是行之有效的编码规范,是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。合理使用设计模式将有助于初学者更加深入地理解面向对象思维。

一、三大基本模式

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