PHP不只是开发出功能就OK了

PHP的设计模式工厂模式

考虑下面的工厂模式的例子:

<?php

class Automobile

{

private $vehicleMake;

private $vehicleModel;

public function __construct($make, $model)

{

$this->vehicleMake = $make;

$this->vehicleModel = $model;

}

public function getMakeAndModel()

{

return $this->vehicleMake . ' ' . $this->vehicleModel;

}

}

class AutomobileFactory

{

public static function create($make, $model)

{

return new Automobile($make, $model);

}

}

// 用工厂的 create 方法创建 Automobile 对象

$veyron = AutomobileFactory::create('Bugatti', 'Veyron');

print_r($veyron->getMakeAndModel()); // outputs "Bugatti Veyron"

上面的代码用来一个工厂来创建 Automobile 对象。用这种方式创建对象有两个好处: 首先,如果你后续需要更改,重命名或替换 Automobile 类,你只需要更改工厂类中的代码,而不是在每一个用到 Automobile 类的地方修改; 其次,如果创建对象的过程很复杂,你也只需要在工厂类中写,而不是在每个创建实例的地方重复地写。

单例模式

我们设计 web 应用时,我们经常需要取得某个类的唯一实例,单例模式就帮我们解决了这个问题。

TODO: NEED NEW SINGLETON CODE EXAMPLE

上面的代码用静态变量 实现了单例模式和创建单例的静态方法 getInstance(). 请注意以下几点:

构造函数 __construct() 被声明为 protected 是为了防止用 new 操作符在这个类之外创建新的实例。

魔术方法 __clone() 被声明为 private 是为了防止用 clone 操作符克隆出新的实例.

魔术方法 __wakeup() 被声明为 private 是为了防止通过全局函数 unserialize() 反序列化这个类的实例。

新的实例是用过静态方法 getInstance() 使用后期静态绑定生成的。这允许我们对 Singleton 类进行继承,并且在取得 SingletonChild 的单例时不会出现问题。

单例模式是非常有用的,特别是我们需要确保在整个请求的声明周期内只有一个实例存在。 典型的应用场景是,当我们有一个全局的对象(比如配置类)或一个共享的资源(比如事件队列)时。

你应该非常小心地使用单例模式,因为它非常自然地引入了全局状态到你的应用中,降低了可测试性。 在大多数情况下,依赖注入可以(并且应该)代替单例类。 使用依赖注入意味着我们不会在设计应用时引入不必要的耦合,因为对象使用共享的或全局的资源,不再需要耦合具体的类。

PHP不只是开发出功能就OK了

¥74.8
购买

php

相关推荐