最近没事就看看设计模式,先把主要的模式列表列出来,然后逐个详细说说。
常用设计模式
单例模式
确保一个类只有一个实例, 而且自行实例化,并向整个系统提供这个实例。
优点
- 由于只有一个实例减少了内存的开销
- 由于只实例化一次,在创建的对象需要读取配置,获取其他依赖对像时,能减少性能的开销
- 避免文件多重占用,例如文件的写操作
- 优化和共享资源的访问
缺点
- 单例模式一般没有接口,扩展只能通过修改源代码
- 与单一职责原则相冲突
- 对测试不利, 单例不写好,无法测试
场景
- 创建对象的消耗太大,比如对象中存在了大量的常量
- 对象在整个程序的运行过程中并不会发生改变
例如,我们常用的数据库连接基本都是单例模式,因为创建的连接对象是一致的,并不会发生改变,此时,如果不使用单例模式,创建过多的对象,只会带来性能开销。
代码实现
<?php/*** Created by PhpStorm.* User: winlans* Date: 12/30/17* Time: 10:49 PM*/class MySQL {private $dbname = 'test';private $host = '127.0.0.1';private $user = 'root';private $passwd = '';private $connect;private static $singleton;private function __construct(){$this->connect = new PDO(sprintf('mysql:dbname=%s;host=%s', $this->dbname,$this->host),$this->user, $this->passwd);}public static function getSingleton(){if ( !self::$singleton instanceof self) {self::$singleton = new self();}return self::$singleton;}private function __clone(){// TODO: Implement __clone() method.}public function query($sql){$statement = $this->connect->query($sql);return $statement->fetchAll();}}$mysql = MySQL::getSingleton();$result = $mysql->query('select * from student');
