文章目录
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
设计模式是对某个问题,经过反复的代码实践与经验总结,得出的最优的解决方案。
1.单例模式
一个类只能产生一个对象!
目的:就是为了节省内存。 三私一公两静态
final class Singleton{
// 初始化一个静态属性用来保存对象, 因为静态方法只能访问静态属性
// 这个属性 设置成私有属性,在类的外部不能访问
static private $single = ' ';
// 第1步
private function __construct(){}
// 第2步
public static function getSingle(){
// 判断对象是否已经存在
if( self::$single === " "){
self::$single = new self;
}
return self::$single;
}
private function __clone(){}
}
2.工厂模式
工厂模式的意思其实就是提供获取某个对象实例的一个接口,同时使调用代码避免确定实例化基类的步骤,实际上就是建立一个统一的类实例化的函数接口,完事统一调用,统一控制,它是PHP中常用的一种设计模式,一般会配合单例模式一起使用,来加载php类库中的类。
**目的:**为了防止同时new出好多对象。先建立一个工厂的类,再写一个工厂的静态方法,调用这个方法时携带参数去控制实例化哪个对象。
class Factory{
static public function getClass($class){
$newClass = new $class();
return $newClass;
}
}
class car{
}
class dog{
}
class fly{
}
$objCar = Factory::getClass('dog');
var_dump($objCar);
3.策略模式
有n个做法供你选择,根据你的需要选择某个策略得到结果
4.观察者模式
一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。
// 定义一个 基础的事件接口
interface BaseEvent{
// 添加观察者
function addObserver(User $obj);
// 删除观察者
function delObserver(User $obj);
// 发通知
function message($contents);
}
interface User{
// 当事件发生 用户做出的反应
function response();
}
class Event implements BaseEvent{
// 所有的观察者
public $observers = [];
// 添加观察者
function addObserver($obj){
// 加入观察者
$this->observers[] = $obj;
}
// 删除观察者
function delObserver($obj){
foreach($this->observers as $k=>$v){
// 判断 如果 转入的对象与遍历出的对象一致 ,这时要删除它
if ( $v == $obj)
{
unset($this->observers[$k]);
}
}
}
// 发通知
function message($contents){
echo '当'.$contents.'发生的时候<br />';
foreach($this->observers as $v){
$v->response();
}
}
}
// 英雄类
class Hero implements User{
function response(){
echo get_class($this)."无畏生命!<br />";
}
}
// loser类
class Loser implements User{
function response(){
echo get_class($this)."贪生怕死!<br />";
}
}
// 局外人类
class Outlier implements User{
function response(){
echo get_class($this)."默默祈福!<br />";
}
}
$event = new Event();
$hero = new Hero();
$loser = new Loser();
$outlier = new Outlier();
$profiteer = new Profiteer();
$event->addObserver($hero);
$event->addObserver($loser);
$event->addObserver($outlier);
$event->addObserver($profiteer);
$event->delObserver($profiteer);
$event->message('汶川地震');