PHP的五大设计模式
单例模式
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例
单例模式是一种常见的设计模式,在计算机系统中,线程池、缓存、日志对象、对话框、打印机、数据库操作、显卡的驱动程序常被设计成单例。
单例模式分3中:懒汉式单例,饿汉式单例,登记式单例
单例模式有以下3个特点:
只能有一个实例
必须自行创建这个实例
必须给其他对象提供这个实例
PHP使用单例模式的主要应用场合就是应用程序与数据库打交道的场景,在一个应用中会存在大量的数据库操作,针对数据库句柄连接数据库的行为,使用单例模式可以避免大量的new操作。每一个的new操作都会消耗系统和内存的资源。
<?php class Single{ //声明一个私有的实例变量 private $name; //声明一个私有构造方法,为了防止外部代码使用new来创建对象 private function __construct(){ } //声明一个静态变量(保存在类中唯一的一个实例) static public $instance; //声明一个静态方法,用于检测是否有实例对象 static public function getinstance(){ if(!self::$instance)self::$instance = new self(); return self::$instance; } public function setname($n){ $this->name = $n; } public function getname(){ return $this->name; } } $oa = Single::getinstance(); $ob = Single::getinstance(); $oa->setname('hello world'); $ob->setname('good morning'); echo $oa->getname();//good morning echo $ob->getname();//good morning ?>
点击 "运行实例" 按钮查看在线实例
工厂模式
工厂模式是我们最常用的实例化对象模式,使用工厂方法代替new操作的一种模式。
使用工厂模式的好处是,通过你想要更改所实例化的类名等,则只需要更改该工厂方法内容即可,不需逐一寻找代码中具体实例化的地方修改了。为系统结构提供灵活的动态扩展机制,减少了耦合。
<?php header('Content-Type:text/html;charset=utf-8'); /** *简单工厂模式(静态工厂方法模式) */ //Interface people 人类 interface people{ public function say(); } //Class man 继承people的***类 class man implements people{ public function say(){ echo '我是***'; } } //Class women 继承people的***类 class women implements people{ public function say(){ echo '我是***'; } } // Class SimpleFactoty 工厂类 class SimpleFactory{ //简单工厂里的静态方法,用于创建man对象 static public createMan(){ return new man(); } //简单工厂里的静态方法,用于创建woman对象 static public createWomen(){ return new woman(); } } $man = SimpleFactory::createMan(); $man->say(); $woman = SimpleFactory::createWomen(); $woman->say(); ?>
点击 "运行实例" 按钮查看在线实例