什么是设计模式?
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
PHP设计模式——六大原则
1.单一职责
2.里氏代换原则
3.依赖倒置原则
4.接口隔离原则
5.迪米特法则(最少知道原则)
6.开闭原则
一、工厂模式
工厂模式是我们最常用的实例化对象模式,是用工厂方法代替new操作的一种模式。
使用工厂模式的好处是,如果你想要更改所实例化的类名等,则只需更改该工厂方法内容即可,不需逐一寻找代码中具体实例化的地方(new处)修改了。为系统结构提供灵活的动态扩展机制,减少了耦合
<?php
header('Content-Type:text/html;charset=utf-8');
// 简单工厂模式(静态工厂方法模式)
// Interface people 人类
interface people
{
public function say();
}
// Class man 继承people的男人类
class man implements people
{
// 具体实现people的say方法
public function say()
{
echo '我是男人<br>';
}
}
// Class women 继承people的女人类
class women implements people
{
// 具体实现people的say方法
public function say()
{
echo '我是女人<br>';
}
}
// Class SimpleFactoty 工厂类
class SimpleFactoty
{
// 简单工厂里的静态方法-用于创建男人对象
static function createMan()
{
return new man();
}
// 简单工厂里的静态方法-用于创建女人对象
static function createWomen()
{
return new women();
}
}
$man = SimpleFactoty::createMan();
$man->say(); //我是男人
$woman = SimpleFactoty::createWomen();
$woman->say() //我是女人
二、单例模式
所谓单例模式,就是确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例,即在应用程序中只会有这个类的一个实例存在。
单例模式有以下3个特点:
1.只能有一个实例,必须拥有一个构造函数,并且必须被标记为private
2.必须自行创建这个实例,拥有一个保存类的实例的静态成员变量
3.必须给其他对象提供这一实例,拥有一个访问这个实例的公共的静态方法
4.单例类不能再其它类中直接实例化,只能被其自身实例化
那么为什么要使用PHP单例模式?
PHP一个主要应用场合就是应用程序与数据库打交道的场景,在一个应用中会存在大量的数据库操作,针对数据库句柄连接数据库的行为,使用单例模式可以避免大量的new操作。因为每一次new操作都会消耗系统和内存的资源。
<?php
class Single {
private $name;//声明一个私有的实例变量
private function __construct(){//声明私有构造方法为了防止外部代码使用new来创建对象。
}
static public $instance;//声明一个静态变量(保存在类中唯一的一个实例)
static public function getinstance(){//声明一个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