> 백엔드 개발 > PHP 튜토리얼 > 모든 소프트웨어 엔지니어가 알아야 할 주요 디자인 패턴

모든 소프트웨어 엔지니어가 알아야 할 주요 디자인 패턴

Barbara Streisand
풀어 주다: 2024-12-30 04:59:09
원래의
724명이 탐색했습니다.

Top esign Patterns Every Software Engineer Should Know

PHP는 특히 PHP의 속성, 열거형, 읽기 전용 속성과 같은 최신 기능을 갖추고 있어 디자인 패턴을 구현하는 데 매우 적합합니다. 모든 소프트웨어 엔지니어가 알아야 할 5가지 필수 패턴은 다음과 같습니다.


1. 싱글톤 패턴

클래스에 인스턴스가 하나만 있도록 합니다.

final class Config 
{
    private static ?Config $instance = null;

    private function __construct(public readonly array $settings) {}

    public static function getInstance(): Config 
    {
        return self::$instance ??= new Config(['env' => 'production']);
    }
}

// Usage
$config = Config::getInstance();
echo $config->settings['env']; // Output: production
로그인 후 복사

2. 팩토리 패턴

객체 생성 로직을 중앙 집중화합니다.

class DatabaseFactory 
{
    public static function create(string $type): Database 
    {
        return match ($type) {
            'mysql' => new MySQLDatabase(),
            'postgres' => new PostgresDatabase(),
            default => throw new InvalidArgumentException("Unknown database type"),
        };
    }
}

interface Database { public function connect(): void; }
class MySQLDatabase implements Database { public function connect() { echo "MySQL connected"; } }
class PostgresDatabase implements Database { public function connect() { echo "Postgres connected"; } }

// Usage
$db = DatabaseFactory::create('mysql');
$db->connect(); // Output: MySQL connected
로그인 후 복사

3. 관찰자 패턴

상태 변경에 대해 여러 객체에 알립니다.

class Event 
{
    private array $listeners = [];

    public function attach(callable $listener): void { $this->listeners[] = $listener; }
    public function trigger(string $data): void { foreach ($this->listeners as $listener) $listener($data); }
}

// Usage
$event = new Event();
$event->attach(fn($data) => print "Listener 1: $data\n");
$event->attach(fn($data) => print "Listener 2: $data\n");

$event->trigger("Event triggered"); 
// Output:
// Listener 1: Event triggered
// Listener 2: Event triggered
로그인 후 복사

4. 데코레이터 패턴

객체에 동작을 동적으로 추가합니다.

interface Text { public function render(): string; }

class PlainText implements Text 
{
    public function __construct(private string $text) {}
    public function render(): string { return $this->text; }
}

class BoldText implements Text 
{
    public function __construct(private Text $text) {}
    public function render(): string { return "<b>" . $this->text->render() . "</b>"; }
}

// Usage
$text = new BoldText(new PlainText("Hello, World!"));
echo $text->render(); // Output: <b>Hello, World!</b>
로그인 후 복사

5. 전략 패턴

런타임에 알고리즘을 전환합니다.

interface PaymentStrategy { public function pay(float $amount): void; }

class CreditCardPayment implements PaymentStrategy 
{
    public function pay(float $amount): void { echo "Paid $amount with Credit Card\n"; }
}

class PayPalPayment implements PaymentStrategy 
{
    public function pay(float $amount): void { echo "Paid $amount via PayPal\n"; }
}

class PaymentProcessor 
{
    public function __construct(private PaymentStrategy $strategy) {}

    public function execute(float $amount): void 
    {
        $this->strategy->pay($amount);
    }
}

// Usage
$processor = new PaymentProcessor(new PayPalPayment());
$processor->execute(100.00); // Output: Paid 100 via PayPal
로그인 후 복사

이러한 패턴은 실제 문제를 해결하며 유지 관리 및 확장 가능한 애플리케이션을 작성하는 데 기본이 됩니다.

현재 프로젝트에 어떤 패턴이 공감되나요? 댓글로 토론해보자! ?

위 내용은 모든 소프트웨어 엔지니어가 알아야 할 주요 디자인 패턴의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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