深入解析PHP设计模式

2023-10-02 17:55

1.单例模式

一个类只能允许一个对象存在

2。工厂模式

工厂模式,顾名思义,就像一个工厂。你把原材料放进工厂,出来的就是成品。您不需要知道工厂里做了什么。工厂模式主要用于解耦。

将对象创建和使用的过程分开。比如:ClassA调用ClassB,那么ClassA只调用ClassB的方法,
至于实例化ClassB,是在工厂中实现的。这样不仅减少了代码的复用,也方便了ClassB的后期维护。
如果ClassB的实例化过程很复杂,如果使用简单工厂模式,你会发现外部不需要关注复杂的实例化,只需要调用ClassB的方法即可,减少错误

接口mysql{
  公共函数连接();
}
 
类 mysqli2 实现 mysql{
  公共函数连接(){
    回显“mysqli”;
  }
}
 
类 pdo2 实现 mysql{
  公共函数连接(){
    回显“pdo”;
  }
}

类 mysqlFactory{
  静态公共函数工厂($class_name){
    返回新的$class_name();
  }
}
$obj = mysqlFactory::factory('pdo2');
$obj->connect();

3。注册模式

注册模式,解决全局共享和交换对象。创建的对象挂在一个全局可用的数组上,

需要使用时直接从数组中获取即可。在全局树中注册该对象。直接去任何地方参观。



4。适配器模式

将一个类的接口转换成客户想要的另一个接口。

//目标角色
界面目标
{
  公共函数newMethod1();
  公共函数newMethod2();
}
 
//需要适配的类(Adaptee)
类人
{
  公共函数oldMethod1()
  {
    回声“男人”;
  }
 
  公共函数oldMethod2()
  {
    回声“男人”;
  }
}
 
//需要适配的类(Adaptee)
阶级妇女
{
  公共函数oldMethod1()
  {
    回声“女人”;
  }公共函数oldMethod2()
  {
    回声“女人”;
  }
}
 
//适配器,
类适配器实现目标
{
  私有$adaptee;
  公共函数 __construct($adaptee)
  {
    $this->adaptee = $adaptee;
  }
 
  公共函数 newMethod1()
  {
    //用少量的代码来适配被适配者
    回声“性别:”;
    $this->adaptee->oldMethod1();
  }
 
  公共函数 newMethod2()
  {
    echo '性别姓名:';
    $this->adaptee->oldMethod2();
  }
}
 
$adapter1 = 新适配器(new Man);
$adapter1->newMethod1();
$adapter2 = 新适配器(新女人);
$adapter2->newMethod2();

5。策略模式

这是一个男人和女人的问题,将一组特定的行为和算法封装到类中以适应某些特定的上下文。

用户策略.php
策略->showAd();
    回声“
”; 回显“类别”; $this->策略->showCategory(); 回声“
”; } 函数 setStrategy(UserStrategy $strategy){ $这个->策略=$策略; } } $page = 新页面(); if(isset($_GET['男'])){ $strategy = new MaleUser(); }别的 { $strategy = new FemaleUser(); } $page->setStrategy($strategy); $page->index();

6。原型模式

不常用,仅用于大型对象类,如clone

所示

7。观察者模式

从面向过程的角度来看,首先观察者注册主题。注册后,主题通知观察者进行相应的操作,整个事情就结束了

/**
 * 事件生成类
 * 事件生成器类
 */
抽象类事件生成器
{
  私人 $ObServers = [];

  //添加观察者
  公共函数添加(ObServer $ObServer)
  {$this->ObServers[] = $ObServer;
  }

  //事件通知
  公共函数notify()
  {
    foreach ($this->ObServers as $ObServer) {
      $ObServer->update();
    }
  }

}

/**
 * 观察者接口类
 *观察服务器接口
 */
接口观察服务器
{
  公共函数更新($event_info = null);
}

/**
 *观察者1
 */
类 ObServer1 实现 ObServer
{
  公共函数更新($event_info = null)
  {
    echo "观察者1收到执行通知,执行完成!\n";
  }
}

/**
 *观察者1
 */
类 ObServer2 实现 ObServer
{
  公共函数更新($event_info = null)
  {
    echo "观察者2收到执行通知,执行完成!\n";
  }
}

/**
 * 事件
 * 班级活动
 */
事件类扩展了事件生成器
{
  /**
   * 触发事件
   */
  公共函数触发器()
  {
    //通知观察者
    $this->notify();
  }
}

//创建一个事件
$事件=新事件();
//将旁观者添加到事件中
$event->add(new ObServer1());
$event->add(new ObServer2());
//执行事件并通知旁观者
$event->trigger();