Rumah > pembangunan bahagian belakang > tutorial php > Corak reka bentuk teratas yang Perlu Tahu Setiap Jurutera Perisian

Corak reka bentuk teratas yang Perlu Tahu Setiap Jurutera Perisian

Barbara Streisand
Lepaskan: 2024-12-30 04:59:09
asal
722 orang telah melayarinya

Top esign Patterns Every Software Engineer Should Know

PHP, terutamanya dengan ciri modennya seperti atribut, enum dan sifat baca sahaja dalam PHP, sangat sesuai untuk melaksanakan corak reka bentuk. Berikut ialah lima corak penting yang perlu diketahui oleh setiap jurutera perisian.


1. Corak Singleton

Memastikan kelas hanya mempunyai satu contoh.

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
Salin selepas log masuk

2. Corak Kilang

Memusatkan logik penciptaan objek.

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
Salin selepas log masuk

3. Corak Pemerhati

Memberitahu berbilang objek tentang perubahan keadaan.

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
Salin selepas log masuk

4. Corak Penghias

Menambahkan gelagat pada objek secara dinamik.

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>
Salin selepas log masuk

5. Corak Strategi

Bertukar antara algoritma semasa masa jalan.

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
Salin selepas log masuk

Corak ini menyelesaikan masalah dunia sebenar dan adalah asas untuk menulis aplikasi yang boleh diselenggara dan berskala.

Corak manakah yang sesuai dengan projek semasa anda? Mari berbincang dalam komen! ?

Atas ialah kandungan terperinci Corak reka bentuk teratas yang Perlu Tahu Setiap Jurutera Perisian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan