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
Barbara Streisandasal
2024-12-30 04:59:09727semak imbas

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

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

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

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>

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

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!

Kenyataan:
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