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.
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
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
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
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>
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!