实习大半年一直都是在写业务代码,并没有去刻意去研究设计模式,只是偶尔看一下博客,草草了解而已,都不是特别懂。最近一段时间才想起学习设计模式。(大神勿喷)
学习思路:
学习一种设计模式首先还是要了解这个设计模式的特点,以及用来解决什么问题,以及有哪些使用案例
引导一(单例的特点):
1. 该类确保自己只有一个实例。
2. 该类必须自己创建自己的实例。
3. 该类必须为其他对象提供唯一的实例。
说白了就是只能有一个实例,无论你new多少次 都是产生同一个对象。
引导二(单例用来解决什么问题)
1.解决重复实例化某个类,造成资源浪费
引导三(那些地方用了单例)
1.最常见的就是数据操作类
具体实现代码如下:
class single{
//单一链接对象
private static $instance;
//私有化构造方法
private function __construct()
{
}
//提供一个外部访问接口
public static function getinstance()
{
if(!isset(self::$instance)){
self::$instance = new self();
}
return self::$instance;
}
private function __clone(){
die('你想干嘛!!');
}
}
var_dump(single::getinstance());
var_dump(single::getinstance());
运行后可以看到两个打印出来的对象是一样的, 这样就实现了单例的特点就是只有一个实例,并且这个实例是在内部自己创建的
接下来是实现一个简单的数据库操作类示例 代码如下:
class DataBase{
private function __construct(){
try{
$this->db = new PDO("mysql:host=127.0.0.1;post=3306;dbname=newecms","root","");
$this->db->exec('SET NAMES UTF8');
}catch (PDOException $e){
echo $e->getMessage();die('错误');
}
}
private $db = null;
private static $instance;
public static function getInstance(){
if(!isset(self::$instance)){
self::$instance = new self();
}
return self::$instance;
}
private function __clone(){
}
public function getDb(){
return $this->db;
}
public function select(){
$res = $this->db->query('select * from wen_ushop');
return $res->fetchAll() ;
}
}
//var_dump($db->getDb());
$db = DataBase::getInstance();
var_dump($db->select());
简单实现了下数据操作类,并没有具体实现详细的方法,有兴趣的朋友可以自己加上
这是我对单例的理解,以及学习思路 欢迎批评指正