推荐链接
简单工厂模式
//产品接口:它定义了产品的通用方法,所有具体产品都必须实现这个接口。
interface Product {
public function operation();
}
//具体产品:它们是实现产品接口的具体类,每个具体产品都提供了自己的实现。
// 具体产品 A
class ConcreteProductA implements Product {
public function operation() {
echo "ConcreteProductA operation.\n";
}
}
// 具体产品 B
class ConcreteProductB implements Product {
public function operation() {
echo "ConcreteProductB operation.\n";
}
}
//简单工厂:它负责根据客户端的请求创建具体产品的对象。它是一个包含了对象创建逻辑的类。
class SimpleFactory {
public static function createProduct($type) {
switch ($type) {
case 'A':
return new ConcreteProductA();
case 'B':
return new ConcreteProductB();
default:
throw new Exception("Invalid product type.");
}
}
}
// 客户端代码
$productA = SimpleFactory::createProduct('A');
$productA->operation(); // Output: ConcreteProductA operation.
$productB = SimpleFactory::createProduct('B');
$productB->operation(); // Output: ConcreteProductB operation.
工厂方法模式
将实现功能给延迟到 子类实现而不用去用使用繁琐的switch了
// 定义产品接口
interface Product {
public function getName();
}
// 具体产品类A
class ConcreteProductA implements Product {
public function getName() {
return "Concrete Product A";
}
}
// 具体产品类B
class ConcreteProductB implements Product {
public function getName() {
return "Concrete Product B";
}
}
// 定义工厂接口
interface Factory {
public function createProduct();
}
// 具体工厂类A
class ConcreteFactoryA implements Factory {
public function createProduct() {
return new ConcreteProductA();
}
}
// 具体工厂类B
class ConcreteFactoryB implements Factory {
public function createProduct() {
return new ConcreteProductB();
}
}
// 使用示例
$factoryA = new ConcreteFactoryA();
$productA = $factoryA->createProduct();
echo $productA->getName(); // 输出:"Concrete Product A"
$factoryB = new ConcreteFactoryB();
$productB = $factoryB->createProduct();
echo $productB->getName(); // 输出:"Concrete Product B"
抽象工厂模式
// 抽象产品接口 - 按钮
interface Button {
public function paint();
}
// 具体产品类 - Windows按钮
class WindowsButton implements Button {
public function paint() {
echo "绘制Windows按钮\n";
}
}
// 具体产品类 - Mac按钮
class MacButton implements Button {
public function paint() {
echo "绘制Mac按钮\n";
}
}
// 抽象产品接口 - 窗口
interface Window {
public function render();
}
// 具体产品类 - Windows窗口
class WindowsWindow implements Window {
public function render() {
echo "渲染Windows窗口\n";
}
}
// 具体产品类 - Mac窗口
class MacWindow implements Window {
public function render() {
echo "渲染Mac窗口\n";
}
}
// 抽象工厂接口
interface GUIFactory {
public function createButton(): Button;
public function createWindow(): Window;
}
// 具体工厂类 - Windows工厂
class WindowsFactory implements GUIFactory {
public function createButton(): Button {
return new WindowsButton();
}
public function createWindow(): Window {
return new WindowsWindow();
}
}
// 具体工厂类 - Mac工厂
class MacFactory implements GUIFactory {
public function createButton(): Button {
return new MacButton();
}
public function createWindow(): Window {
return new MacWindow();
}
}
// 使用示例
function createUI(GUIFactory $factory) {
$button = $factory->createButton();
$window = $factory->createWindow();
$button->paint();
$window->render();
}
// 创建Windows风格的UI
$windowsFactory = new WindowsFactory();
createUI($windowsFactory);
// 创建Mac风格的UI
$macFactory = new MacFactory();
createUI($macFactory);