单例模式应用场景:
程序应用中,涉及到数据库操作时,如果每次操作的时候连接数据库,会带来大量的资源消耗。可以通过单例模式,创建唯一的数据库连接对象。
实现特点:
三私一公:私有的静态变量(存放实例),私有的构造方法(防止创建实例),私有的克隆方法(防止克隆对象),公有的静态方法(对外界提供实例)
PHP
<?phpclass Singleton{
private static $_instance;
private function __construct(){}
private function __clone(){}
public static function getInstance()
{
if(self::$_instance instanceof Singleton){//instanceof 判断一个实例是否是某个类的对象
self::$_instance = new Singleton();
}
return self::$_instance;
}}
工厂模式应用场景:
提供一种类,具有为您创建对象的某些方法,这样就可以使用工厂类创建对象,而不直接使用new。这样如果想更改创建的对象类型,只需更改该工厂即可。
实现特点:
将调用对象与创建对象分离,调用者直接向工厂请求,减少代码的耦合.提高系统的可维护性与可扩展性。
PHP:
//假设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);