📅  最后修改于: 2023-12-03 15:18:32.749000             🧑  作者: Mango
设计模式是软件开发中重要的概念之一,它能够提高代码的复用性、可维护性和可扩展性。PHP 也是一种常用的编程语言,因此 PHP-设计模式的学习和使用对于 PHP 程序员来说是非常必要的。
根据 Gang of Four (GoF) 的分类方法,设计模式可以分为以下三类:
工厂模式是一种创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们定义一个接口来创建对象,但是让子类决定实例化哪个类。工厂模式使其实例化延迟到子类。在 PHP 中,工厂模式可以使用抽象类、接口和类方法等方式实现。
代码示例:
<?php
interface Shape {
public function draw();
}
class Rectangle implements Shape {
public function draw() {
echo "Inside Rectangle::draw() method.";
}
}
class Square implements Shape {
public function draw() {
echo "Inside Square::draw() method.";
}
}
class ShapeFactory {
public function getShape($shapeType) {
if ($shapeType == null) {
return null;
}
if ($shapeType == "RECTANGLE") {
return new Rectangle();
} elseif ($shapeType == "SQUARE") {
return new Square();
}
return null;
}
}
$shapeFactory = new ShapeFactory();
$shape1 = $shapeFactory->getShape("RECTANGLE");
$shape1->draw();
$shape2 = $shapeFactory->getShape("SQUARE");
$shape2->draw();
?>
单例模式是一种创建型模式,它能够保证一个类只有一个实例,并提供一个访问它的全局点。在 PHP 中,单例模式可以使用静态成员变量和类方法实现。
代码示例:
<?php
class SingletonClass {
private static $instance = null;
private function __construct() {}
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new SingletonClass();
}
return self::$instance;
}
public function showMessage() {
echo "Hello World!";
}
}
$singleton = SingletonClass::getInstance();
$singleton->showMessage();
?>
观察者模式是一种行为型模式,它定义了对象之间的一对多的依赖关系,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。在 PHP 中,观察者模式可以使用 SplSubject 和 SplObserver 接口实现。
代码示例:
<?php
class MySubject implements SplSubject {
private $observers = [];
private $state;
public function attach(SplObserver $observer) {
$this->observers[] = $observer;
}
public function detach(SplObserver $observer) {
$index = array_search($observer, $this->observers);
if ($index !== false) {
unset($this->observers[$index]);
}
}
public function notify() {
foreach ($this->observers as $observer) {
$observer->update($this);
}
}
public function setState($state) {
$this->state = $state;
$this->notify();
}
public function getState() {
return $this->state;
}
}
class MyObserver implements SplObserver {
private $name;
public function __construct($name) {
$this->name = $name;
}
public function update(SplSubject $subject) {
echo "{$this->name} has been notified of the state change: {$subject->getState()}<br>";
}
}
$subject = new MySubject();
$observer1 = new MyObserver("Observer 1");
$observer2 = new MyObserver("Observer 2");
$observer3 = new MyObserver("Observer 3");
$subject->attach($observer1);
$subject->attach($observer2);
$subject->attach($observer3);
$subject->setState("state A");
$subject->setState("state B");
$subject->detach($observer2);
$subject->setState("state C");
?>
以上就是 PHP 中常用的几种设计模式,它们分别属于创建型、结构型和行为型三个大类。在实际开发中,我们可以根据具体的业务需求选择合适的设计模式,以便更好地组织和管理代码。