실제 PHP 디자인 패턴에 대한 자세한 설명

PHPz
풀어 주다: 2024-05-07 13:57:01
원래의
483명이 탐색했습니다.

디자인 패턴은 소프트웨어 설계에 대한 입증된 솔루션을 제공하여 일반적인 프로그래밍 문제를 해결합니다. 이 기사에서는 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
로그인 후 복사

Factory Method Pattern

Factory Method Pattern은 객체를 생성하지만 하위 클래스가 생성 프로세스를 변경할 수 있도록 허용하는 인터페이스를 정의합니다. 이는 생성 논리와 제품 클래스를 분리하는 유연한 방법을 제공합니다.

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.
로그인 후 복사

Observer Pattern

Observer 패턴은 하나의 개체(주체)가 여러 개체(관찰자)에게 상태 변경을 알릴 수 있는 일대다 종속 관계를 정의합니다.

아아아아

위 내용은 실제 PHP 디자인 패턴에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿