Heim > Backend-Entwicklung > PHP-Tutorial > Top-Designmuster, die jeder Softwareentwickler kennen sollte

Top-Designmuster, die jeder Softwareentwickler kennen sollte

Barbara Streisand
Freigeben: 2024-12-30 04:59:09
Original
739 Leute haben es durchsucht

Top esign Patterns Every Software Engineer Should Know

PHP eignet sich insbesondere mit seinen modernen Funktionen wie Attributen, Aufzählungen und schreibgeschützten Eigenschaften in PHP gut für die Implementierung von Designmustern. Hier sind fünf wesentliche Muster, die jeder Softwareentwickler kennen sollte.


1. Singleton-Muster

Stellt sicher, dass eine Klasse nur eine Instanz hat.

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
Nach dem Login kopieren

2. Werksmuster

Zentralisiert die Objekterstellungslogik.

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
Nach dem Login kopieren

3. Beobachtermuster

Benachrichtigt mehrere Objekte über Zustandsänderungen.

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
Nach dem Login kopieren

4. Dekorationsmuster

Fügt Objekten dynamisch Verhalten hinzu.

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>
Nach dem Login kopieren

5. Strategiemuster

Wechselt zur Laufzeit zwischen Algorithmen.

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
Nach dem Login kopieren

Diese Muster lösen reale Probleme und sind von grundlegender Bedeutung für das Schreiben wartbarer und skalierbarer Anwendungen.

Welches Muster passt zu Ihrem aktuellen Projekt? Lasst uns in den Kommentaren diskutieren! ?

Das obige ist der detaillierte Inhalt vonTop-Designmuster, die jeder Softwareentwickler kennen sollte. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage