在 PHP 中,設計模式提供了解決常見編程問題的預設模板。使用屬性(Properties)是一種靈活的方式,可以簡化某些設計模式的實現。以下是如何利用 PHP 屬性實現設計模式的一些建議:
單例模式確保一個類只有一個實例,并提供一個全局訪問點。
class Singleton {
private static $instance;
private $property;
private function __construct($property) {
$this->property = $property;
}
public static function getInstance($property) {
if (null === self::$instance) {
self::$instance = new Singleton($property);
}
return self::$instance;
}
public function getProperty() {
return $this->property;
}
public function setProperty($property) {
$this->property = $property;
}
}
工廠方法模式根據輸入條件創建不同的對象。
interface Product {
public function getPrice();
}
class ConcreteProductA implements Product {
private $price;
public function __construct($price) {
$this->price = $price;
}
public function getPrice() {
return $this->price;
}
}
class ConcreteProductB implements Product {
private $price;
public function __construct($price) {
$this->price = $price;
}
public function getPrice() {
return $this->price;
}
}
class ProductFactory {
public static function createProduct($type, $price) {
if ($type == 'A') {
return new ConcreteProductA($price);
} elseif ($type == 'B') {
return new ConcreteProductB($price);
}
}
}
觀察者模式定義了對象之間的一對多依賴關系,當一個對象改變狀態時,所有依賴于它的對象都會得到通知并自動更新。
interface Observer {
public function update($data);
}
class ConcreteObserver implements Observer {
private $data;
public function update($data) {
$this->data = $data;
$this->handleData();
}
private function handleData() {
echo "Observer received data: {$this->data}\n";
}
}
class Subject {
private $observers;
private $data;
public function __construct() {
$this->observers = [];
}
public function addObserver(Observer $observer) {
$this->observers[] = $observer;
}
public function removeObserver(Observer $observer) {
unset($this->observers[$observer]);
}
public function setData($data) {
$this->data = $data;
foreach ($this->observers as $observer) {
$observer->update($data);
}
}
}
這些示例展示了如何使用 PHP 屬性實現基本的設計模式。你可以根據自己的需求調整這些示例,以適應不同的場景。