php的设计模式如何实现,常见的PHP设计模式和实现

全部设计模式请看《PHP设计模式教程》

不论是 PHP、Java还是C++编程语言,在编程的时候,我们所遇到的大部分问题,其实都已经被其他程序员一再的处理了。设计模式提取了共同问题,定义了经过测试的解决方案,并描述了可能的结果。也就是说,设计模式(Patterns)是一些可以在项目中重复使用的解决方案。但是,设计模式并非像组件那样,能被合并来构建系统的固定的解决方案,它们是解决一般性问题的通用方法。

1 工厂模式

工厂通常是一个用来创建其他对象的对象。对于某些需要大量实例化(new)的类,可以用另外一个类来专门管理其实例化过程,这样在使用的时候就不需要每次都用new来实例化,直接调用工厂类即可,避免代码的重复。而且,如果实例化过程需要调整,也不用每个地方都要修改。

PHP实例代码如下。

// 会大量使用到的 User 类

class User

{

public function getUserName()

{

return 'Bob';

}

}

// 创建用于实例化 User 的工厂类,使用一个静态方法返回实例化后的对象

class UserFactory

{

public static function createUser()

{

return new User;

}

}

// 这样就可以通过工厂类来实例化并使用 User 对象了

$user = UserFactory::createUser();

echo $user->getUserName();

抽象工厂模式、生成器模式和单例模式都会用到工厂模式的概念。

2 单例模式

单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。

再比如,通过数据库句柄到数据库的连接是独占的,所以在应用程序中就要共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销。如下是代码示例。

class Database

{

private static $db;

private function __construct()

{

}

static function getInstance()

{

if(!self::$db){

self::$db = new self();

}

return self::$db;

}

}

$db = Database::getInstance(); // 第一次使用,会创建对象

$db = Database::getInstance(); // 第二次使用,直接使用句柄对象

$db = Database::getInstance(); // 第三次或更多次,也是直接使用

代码中将构造函数 __construct() 可见性设置为私有,这样在应用中就无法 new 来创建对象,必须通过 Database 类中自带的 getInstance() 方法获取数据库句柄。如果句柄不存在,则创建句柄对象;如果已经存在,则直接返回。

参考资料

PHP: The Right Way - Design Patterns

Graphic Design Patterns -创建型模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值