欢迎来到[自学php网] ①群 287460651

主页 > php专栏 > php综合实列 >

PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】

来源:自学PHP网    时间:2019-08-01 11:26 作者:小飞侠

[导读] PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】...

本文实例讲述了PHP中常用的三种设计模式。分享给大家供大家参考,具体如下:1.单例模式

  • 在一次页面请求中, 便于进行调试, 因为所有的代码(例如数据库操作类db)都集中在一个类中, 我们可以在类中设置钩子, 输出日志,从而避免到处var_dump, echo。private。单例类的加强:禁止克隆。
    
    
    
    
    bark();
    // 下面将得到Example类的单例对象
    $test = Example::singleton();
    $test->bark();
    // 复制对象将导致一个E_USER_ERROR.
    $test_clone = clone $test;
    ?>
    
    PHP对象克隆__clone()介绍2. 工厂模式
    
    
    width = $width;
        $this->height = $height;
      }
      public function getCircum() {
        return 2 * ($this->width + $this->height);
      }
      public function getArea() {
        return $this->width * $this->height;
      }
    }
    // 定义圆类
    class Circle implements IShape {
      private $radii;
      public function __construct($radii) {
        $this->radii = $radii;
      }
      public function getCircum() {
        return 2 * M_PI * $this->radii;
      }
      public function getArea() {
        return M_PI * pow($this->radii, 2);
      }
    }
    // 根据传入的参数个数不同来创建不同的形状。
    class FactoryShape {
      public static function create() {
        switch (func_num_args()) {
          case 1:
          return new Circle(func_get_arg(0));
          break;
          case 2:
          return new Rectangle(func_get_arg(0), func_get_arg(1));
          break;
        }
      }
    }
    // 矩形对象
    $c = FactoryShape::create(4, 2);
    var_dump($c->getArea());
    // 圆对象
    $o = FactoryShape::create(2);
    var_dump($o->getArea());
    
    
    

    3. 观察者模式

    name;
      }
    }
    // 可被观察类
    class Observable implements IObservable {
      protected $observers = array();
      public function addObserver($observer) {
        if (!($observer instanceof IObserver)) {
          return;
        }
        $this->observers[] = $observer;
      }
      public function removeObserver($observer_name) {
        foreach ($this->observers as $index => $observer) {
          if ($observer->getName() === $observer_name) {
            array_splice($this->observers, $index, 1);
            return;
          }
        }
      }
    }
    // 模拟一个可以被观察的类:RadioStation
    class RadioStation extends Observable {
      public function addListener($listener) {
        foreach ($this->observers as $observer) {
          $observer->onListen($this, $listener);
        }
      }
    }
    // 模拟一个观察者类
    class RadioStationLogger extends Observer {
      protected $name = 'logger';
      public function onListen($sender, $args) {
        echo $args, ' join the radiostation.
    '; } } // 模拟另外一个观察者类 class OtherObserver extends Observer { protected $name = 'other'; public function onListen($sender, $args) { echo 'other observer..
    '; } } $rs = new RadioStation(); // 注入观察者 $rs->addObserver(new RadioStationLogger()); $rs->addObserver(new OtherObserver()); // 移除观察者 $rs->removeObserver('other'); // 可以看到观察到的信息 $rs->addListener('cctv'); ?> php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

    希望本文所述对大家PHP程序设计有所帮助。

    最新文章

    点击排行

    自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

    京ICP备14009008号@版权所有www.zixuephp.com

    网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com