微麦PHP 2019-06-30
总体来说设计模式分为三大类:
下面,简单介绍几种设计模式:
单例模式
缺点
一、开销
虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。
二、可能的开发混淆
使用单例对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。
<?php
//单例
class Log
{
//创建静态私有的变量保存该类对象
static private $instance;
//参数
private $config;
//防止直接创建对象
private function __construct($config){
$this->config = $config;
echo "我已经被实例化了-";
}
//防止克隆对象
private function __clone(){}
public static function getInstance($config){
//判断$instance是否是Log的对象
//没有则创建则创建
if (!self::$instance instanceof self) {
self::$instance = new self($config);
}
return self::$instance;
}
public function getName(){
echo $this->config;
}
}
$db1 = Log::getInstance('实例化1');
$db1->getName();
echo "<br>";
$db2 = Log::getInstance('实例化2');
$db2->getName();
?>
运行结果:
我已经被实例化了-实例化1
实例化2是一道经常出现在前端面试时的问题。如果只是简单的了解new关键字是实例化构造函数获取对象,是万万不能够的。更深入的层级发生了什么呢?同时面试官想从这道题里面考察什么呢?下面胡哥为各位小伙伴一一来解密。