单例模式
三私一公:私有化的静态变量(存放实例)、私有化构造方法(防止创建实例)、私有化的克隆方法(防止克隆对象)、公有化的静态方法(对外界提供实例).
class Singleton
{
private static $_instance;
private function __construct(){}
private function __clone(){}
publice static function getInstance()
{
// instanceof(1)判断一个对象是否是某个类的实例,(2)判断一个对象是否实现了某个接口。
if(!(self::$_instance instanceof Singleton))
{
self::$_instance = new Singleton();
}
return self::$_instance();
}
}
工厂模式
将调用对象与创建对象分离,调用者直接向工厂请求,减少代码的耦合,提高系统的可维护性与可扩展性。
应用场景
提供一种类,具有为你创建对象的某些方法,这样就可以使用工厂类创建对象,而不直接使用new。这样如果想更改创建的对象类型,只需更改该工厂即可。
//假设3个待实例化的类
class Aclass{}
class Bclass{}
class Cclass{}
class Factory
{
// 定义每个类的类名
const ACLASS = 'Aclass';
const BCLASS = 'Bclass';
const CCLASS = 'Cclass';
public static function getInstance($newClass)
{
$class = $newClass;// 这里常常用来解析路由,加载文件。
return new $class;
}
}
// 调用方法:
Factory::getInstance(Factory::ACLASS);