所有分类
  • 所有分类
  • 后端开发
深入探讨 PHP 常用设计模式及实战案例:单例、工厂方法与观察者模式

深入探讨 PHP 常用设计模式及实战案例:单例、工厂方法与观察者模式

设计模式为软件设计提供经过验证的解决方案,解决常见编程问题。中的常用设计模式,并通过实战案例进行阐述,涵盖单例模式、工厂方法模式和观察者模式。设计模式为软件设计提供了一套经过验证的解决方案,以解决常见编程问题。中常用的设计模式,并通过实战案

在我当程序猿的那几年里,设计模式就像我的左右手,帮我搞定了不少难题。别看它只是几个理论公式,但其实都是被人验证过的好办法。在做PHP编程时,懂得运用设计模式,就能让你的代码更易维护和升级。我还记得有一回,因为没搞懂设计模式,我负责的那个项目变得乱七八糟,每次更新都要花好多时间去琢磨和改动原来的代码,效率太低了。从那时起,我就开始认真研究并使用设计模式,结果真的很不错。

深入探讨 PHP 常用设计模式及实战案例:单例、工厂方法与观察者模式

设计模式就像是个万能工具箱,帮助我们解决各种编程难题。对于PHP项目来说,我特别喜欢那些既能提速又能优化代码的模式,比如单例模式、工厂方法模式和观察者模式等等。用上这些模式,我的开发速度快多了,也更有信心迎接新项目的挑战!

单例模式的实际应用

单例模式就是PHP里面特别好用的设计模式之一,它帮我们保证类里只存在一份东西,还能提供个统一入口。比如我们有个项目要用到数据库,就可以用它来管数据库连不上问题,这样所有地方都能用同一个实例去操作,避免了重复申请,速度也快多了。

那个时候在搞项目,得常常记日志,我就想到用单例模式,这样日志统一又省资源。用了以后,发现真的对写代码有利,一大堆问题都解决了,真可谓是实用至极!

工厂方法模式的灵活运用

class Database {
  private static ?PDO $instance = null;
  private function __construct() {}
  public static function getInstance(): PDO {
    if (self::$instance === null) {
      self::$instance = new PDO('mysql:host=localhost;dbname=my_db', 'user', 'password');
    }
    return self::$instance;
  }
}
// 使用 Singleton
$db1 = Database::getInstance();
$db2 = Database::getInstance();
// 两个变量指向同一个 PDO 对象
var_dump($db1 === $db2); // true

工厂方法模式是解决对象创建难题的高手。它建立了一个造物的接口,具体的对象种类就让子类来搞定。这个灵活性在面对复杂的对象创建逻辑时特别好用。举个例子,在做电商项目时,我就用这招来生成各种优惠券对象。只要系统需要新增优惠券,工厂方法就能按照设定动态生成,让代码变得soeasy!

工厂方法那就是个爽!代码变得超级灵活不说,测试起来也轻松多了。因为我能把造东西的规矩都放儿孙那儿去,模拟啥样儿的环境还不是手到擒来?这招儿用得我做项目时心花怒放,效率跟火箭似的飙升呢!

观察者模式的效果体验

观鸟模式,真的好用!它能让一批对象都知道另一个对象的状况变了,然后自动更新。比如说在做社交网站的时候,用户一旦关注或者取关某个东西,相应的动态和提醒就会自动更新,就不用一个个模块去改了。

interface Shape {
  public function draw(): void;
}
class Circle implements Shape {
  public function draw(): void {
    echo 'Drawing a circle.' . PHP_EOL;
  }
}
class Square implements Shape {
  public function draw(): void {
    echo 'Drawing a square.' . PHP_EOL;
  }
}
class ShapeFactory {
  public static function createShape(string $type): Shape {
    switch ($type) {
      case 'circle':
        return new Circle();
      case 'square':
        return new Square();
      default:
        throw new InvalidArgumentException('Invalid shape type.');
    }
  }
}
// 使用工厂方法
$circle = ShapeFactory::createShape('circle');
$square = ShapeFactory::createShape('square');
$circle->draw(); // Drawing a circle.
$square->draw(); // Drawing a square.

观察者模式让处理事件变得简单多了,让系统更稳固好修。用这个方法,我能把注意力放在业务逻辑上,不用操心太多怎么处理事件。这样子,既提升了系统反应速度,又给用户带来更好的体验。

总结与展望

学习了PHP里的几个设计模式,感觉设计模式真的很重要!它们可以让我们代码更好看更厉害,更能节约时间提高工作效率,还能让我们的项目变得容易维护。我会继续学下去,以后用这些设计模式做项目,让自己变成真正的高手!

最后,我想问问大家一个问题哦:你们在做项目时最爱用啥设计模式?又是怎么帮你们搞定问题的?快来评论区分享下你的经验。觉得好就点个赞,分享给更多小伙伴~这样他们也能感受到设计模式的魔力!

interface Subject {
  public function attach(Observer $observer): void;
  public function detach(Observer $observer): void;
  public function notify(): void;
}
class NewsPortal implements Subject {
  private array $observers = [];
  private string $latestNews;
  public function attach(Observer $observer): void {
    $this->observers[] = $observer;
  }
  public function detach(Observer $observer): void {
    unset($this->observers[array_search($observer, $this->observers)]);
  }
  public function notify(): void {
    foreach ($this->observers as $observer) {
      $observer->update($this);
    }
  }
  public function publishNews(string $news): void {
    $this->latestNews = $news;
    $this->notify();
  }
}
interface Observer {
  public function update(Subject $subject): void;
}
class NewsReader implements Observer {
  public function update(Subject $subject): void {
    $news = $subject->getLatestNews();
    echo 'Received latest news: ' . $news . PHP_EOL;
  }
}
// 使用观察者模式
$newsPortal = new NewsPortal();
$reader1 = new NewsReader();
$reader2 = new NewsReader();
$newsPortal->attach($reader1);
$newsPortal->attach($reader2);
$newsPortal->publishNews('New developments in the ongoing war.');
$newsPortal->detach($reader2);
$newsPortal->publishNews('Another major breakthrough in science.');

原文链接:https://www.icz.com/technicalinformation/web/2024/06/17354.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?