PHP设计模式

本文详细介绍了PHP中的三种工厂设计模式——简单工厂模式通过switch创建产品实例,工厂方法模式将对象创建推迟到子类,抽象工厂模式则提供一系列相关的具体产品对象。通过实例展示了每种模式的使用方法和优势。
摘要由CSDN通过智能技术生成

推荐链接

链接目录

简单工厂模式

//产品接口:它定义了产品的通用方法,所有具体产品都必须实现这个接口。
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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值