PHP 中的设计模式

来源:互联网 发布:淘宝争议处理规范2016 编辑:程序博客网 时间:2024/05/27 09:46

1.单例模式:某一个类只有一个实例,并且自行实例化并向整个系统提供这个实例。

三个要点:

(1)这个类只能有一个实例;

(2)必须自行实例化这个实例;

(3)自行向整个系统提供这个实例。

使用单例模式的原因:

(1)PHP 应用主要在于数据库应用,所以一个应用中会存在大量的数据库操作,在使用面向对象的方式开发时,使用单例模式可以避免大量的 new 操作消耗资源;

(2)如果系统中需要有一个类来全局控制某些配置信息,则使用单例模式就可以很方便的实现,可以参看zend Framework 的 FrontController 部分;

(3)再一次页面请求中便于进行调试,因为所有代码都集中在一个类中,然后可以在类中设置钩子,输出日志,从而避免到处 var_dump、echo;

(4)可以节省内存,因为单例模式限制了实例对象的个数。

下面是一个简单的例子,仅供参考:

/**声明一个类 DB,用于演示单态模式的使用*/class DB {private static $obj = null;  //声明一个私有,静态的成员属性$obj/*构造方法,使用 private 封装后则只能在类的内部使用 new 去创建对象*/private function __construct() {//在这个方法中去完成一些数据库连接等操作echo "数据库连接成功";}//只有通过该方法才能返回本类的对象,该方法是静态的,用类名调用static function getInstance() {if (is_null(self::$obj)) {self::$obj = new self();  //实例化本类对象}return self::$obj;  //返回本类的对象}//完成对数据库的一些操作function query($sql) {echo $sql;}}//只能使用静态方法 getInstance() 去获取 DB 类的对象$db = DB::getInstance();//访问对象中的成员$db->query("select * from user");

2.工厂模式:是一种类,有创建对象的某些方法的作用。可以使用该模式创建对象,而不直接使用 new,这样如果想要更改所创建的对象类型,只需更改工厂即可。

要点:抽象基类中定义抽象一些方法,用以在子类中实现;子类实行该抽象基类中的抽象方法,工厂类则用以实例化所有相对应的子类。

3.观察者模式:一个对象通过添加一个方法是本身变得可观察。当可观察的对象更改时,他会将消息发送到已注册的观察者。

4.策略模式:该模式非常适合复杂数据管理系统或数据处理系统,二者在数据筛选、搜索或处理的方式方面需要较高的灵活性。

5.命令链模式:该模式以松散耦合主题为基础,发送消息、命令和请求,或通过一组处理程序发送任意内容。每个处理程序都会判断自己能否处理请求。如果可以,该请求被处理,进程停止。为处理请求而创建可扩展的架构时,命令链模式很有价值,使用它可以解决许多问题。

0 0