PHP工廠模式的實(shí)現(xiàn):
工廠模式是一種常用的面向?qū)ο笤O(shè)計(jì)模式,它通過(guò)定義一個(gè)工廠類來(lái)創(chuàng)建和返回其他對(duì)象的實(shí)例,而不需要直接使用new關(guān)鍵字實(shí)例化對(duì)象。以下是一個(gè)簡(jiǎn)單的PHP工廠模式的實(shí)現(xiàn)示例:
<?php
// 定義一個(gè)接口
interface Shape {
public function draw();
}
// 實(shí)現(xiàn)接口的具體類
class Circle implements Shape {
public function draw() {
echo "Drawing a circle\n";
}
}
class Square implements Shape {
public function draw() {
echo "Drawing a square\n";
}
}
// 定義一個(gè)工廠類
class ShapeFactory {
public static function createShape($type) {
switch ($type) {
case 'circle':
return new Circle();
case 'square':
return new Square();
default:
throw new Exception("Unsupported shape type: $type");
}
}
}
// 使用工廠類創(chuàng)建對(duì)象
$circle = ShapeFactory::createShape('circle');
$circle->draw(); // 輸出 "Drawing a circle"
$square = ShapeFactory::createShape('square');
$square->draw(); // 輸出 "Drawing a square"
單例模式的實(shí)現(xiàn):
單例模式是一種常用的面向?qū)ο笤O(shè)計(jì)模式,它確保類只有一個(gè)實(shí)例,并提供全局訪問(wèn)該實(shí)例的方法。以下是一個(gè)簡(jiǎn)單的PHP單例模式的實(shí)現(xiàn)示例:
<?php
class Database {
private static $instance;
private $connection;
private function __construct() {
// 私有構(gòu)造函數(shù),防止通過(guò)new關(guān)鍵字實(shí)例化類
$this->connection = mysqli_connect('localhost', 'username', 'password', 'database');
}
public static function getInstance() {
if (!self::$instance) {
self::$instance = new Database();
}
return self::$instance;
}
public function getConnection() {
return $this->connection;
}
}
// 使用單例類獲取數(shù)據(jù)庫(kù)連接
$db = Database::getInstance();
$connection = $db->getConnection();
// 使用$connection進(jìn)行數(shù)據(jù)庫(kù)操作
在上面的示例中,Database類的構(gòu)造函數(shù)是私有的,因此不能直接通過(guò)new關(guān)鍵字實(shí)例化類。通過(guò)getInstance()方法獲取類的唯一實(shí)例,如果實(shí)例不存在,則創(chuàng)建一個(gè)新實(shí)例并返回,否則直接返回已存在的實(shí)例。通過(guò)getConnection()方法可以獲取數(shù)據(jù)庫(kù)連接對(duì)象,然后可以使用該連接對(duì)象進(jìn)行數(shù)據(jù)庫(kù)操作。