PHP抽象工厂模式Abstract Factory Pattern优点与实现方式
发布:smiling 来源: PHP粉丝网 添加日期:2023-07-03 19:23:05 浏览: 评论:0
这篇文章主要介绍了PHP抽象工厂模式Abstract Factory Pattern优点与实现方式,抽象工厂模式是一种创建型模式,它提供了一种创建一系列相关或相互依赖对象的最佳方式。
抽象工厂模式Abstract Factory Pattern是什么
抽象工厂模式是一种创建型模式,它提供了一种创建一系列相关或相互依赖对象的最佳方式。在抽象工厂模式中,我们定义一个抽象工厂接口,由具体的工厂类来实现该接口,创建一系列相关的对象。
抽象工厂模式的优点
抽象工厂模式可以帮助我们实现松耦合,客户端代码无需知道实际创建的对象,只需知道抽象工厂即可;
抽象工厂模式可以帮助我们封装变化,客户端代码无需关心具体对象的创建过程,只需关心抽象工厂即可;
抽象工厂模式可以帮助我们实现单一职责原则,一个类只负责一个职责,由工厂类负责创建对象。
抽象工厂模式的实现
在 PHP 中,我们可以使用以下方式来实现抽象工厂模式:
1. 定义抽象产品类
- <?php
- // 定义抽象产品类(汽车)
- abstract class Car
- {
- protected $brand;
- protected $type;
- public function __construct($brand, $type)
- {
- $this->brand = $brand;
- $this->type = $type;
- }
- abstract public function run();
- }
- // 定义抽象产品类(手机)
- abstract class Phone
- {
- protected $brand;
- protected $model;
- public function __construct($brand, $model)
- {
- $this->brand = $brand;
- $this->model = $model;
- }
- abstract public function call();
- }
2. 定义具体产品类
- <?php
- // 定义具体产品类(奔驰汽车)
- class BenzCar extends Car
- {
- public function run()
- {
- echo "{$this->brand} {$this->type} is running..." . PHP_EOL;
- }
- }
- // 定义具体产品类(宝马汽车)
- class BmwCar extends Car
- {
- public function run()
- {
- echo "{$this->brand} {$this->type} is running..." . PHP_EOL;
- }
- }
- // 定义具体产品类(苹果手机)
- class ApplePhone extends Phone
- {
- public function call()
- {
- echo "{$this->brand} {$this->model} is calling..." . PHP_EOL;
- }
- }
- // 定义具体产品类(华为手机)
- class HuaweiPhone extends Phone
- {
- public function call()
- {
- echo "{$this->brand} {$this->model} is calling..." . PHP_EOL;
- }
- }
3. 定义抽象工厂类
- <?php
- // 定义抽象工厂类
- abstract class AbstractFactory
- {
- abstract public function createCar($type);
- abstract public function createPhone($model);
- }
4. 定义具体工厂类
- <?php
- // 定义具体工厂类(德国工厂)
- class GermanFactory extends AbstractFactory
- {
- public function createCar($type)
- {
- switch ($type) {
- case 'Benz':
- return new BenzCar('Benz', 'C200L');
- case 'Bmw':
- return new BmwCar('Bmw', 'X3');
- default:
- throw new Exception('Undefined car type.');
- }
- }
- public function createPhone($model)
- {
- switch ($model) {
- case 'iPhone':
- return new ApplePhone('Apple', 'iPhone 11');
- case 'Huawei':
- return new HuaweiPhone('Huawei', 'Mate 30');
- default:
- throw new Exception('Undefined phone model.');
- }
- }
- }
- // 定义具体工厂类(中国工厂)
- class ChineseFactory extends AbstractFactory
- {
- public function createCar($type)
- {
- switch ($type) {
- case 'Benz':
- return new BenzCar('奔驰', 'C200L');
- case 'Bmw':
- return new BmwCar('宝马', 'X3');
- default:
- throw new Exception('Undefined car type.');
- }
- }
- public function createPhone($model)
- {
- switch ($model) {
- case 'iPhone':
- return new ApplePhone('苹果', 'iPhone 11');
- case 'Huawei':
- return new HuaweiPhone('华为', 'Mate 30');
- default:
- throw new Exception('Undefined phone model.');
- }
- }
- }
5. 使用
- <?php
- // 使用德国工厂
- $germanFactory = new GermanFactory();
- $car1 = $germanFactory->createCar('Benz');
- $car1->run(); // output: Benz C200L is running...
- $phone1 = $germanFactory->createPhone('iPhone');
- $phone1->call(); // output: Apple iPhone 11 is calling...
- // 使用中国工厂
- $chineseFactory = new ChineseFactory();
- $car2 = $chineseFactory->createCar('Bmw');
- $car2->run(); // output: 宝马 X3 is running...
- $phone2 = $chineseFactory->createPhone('Huawei');
- $phone2->call(); // output: 华为 Mate 30 is calling...
总结:
抽象工厂模式是一种非常常见的创建型模式,它可以帮助我们封装变化,实现松耦合,同时遵循单一职责原则。在实际开发中,我们可以根据具体的需求,选择不同的抽象工厂模式来实现一系列相关对象的创建。
Tags: PHP抽象工厂模式 Abstract Factory Pattern
- 上一篇:PHP单例模式Singleton Pattern的原理与实现介绍
- 下一篇:最后一页
相关文章
- ·PHP abstract 抽象类定义与用法示例(2021-09-20)
- ·PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解(2022-03-13)
- ·PHP设计模式之工厂模式(Factory Pattern)的讲解(2021-11-13)
- ·PHP设计模式之工厂模式(Factory)入门与应用详解(2022-01-26)
- ·PHP工厂模式Factory Pattern的实现及特点(2023-07-03)
- ·php示例详解Constructor Prototype Pattern 原型模式(2021-06-20)
- ·PHP设计模式之中介者模式(Mediator Pattern)入门与应用案例详解(2022-01-26)
- ·PHP适配器模式Adapter Pattern的使用介绍(2023-07-03)
- ·PHP原型模式Prototype Pattern的使用介绍(2023-07-03)
- ·PHP单例模式Singleton Pattern的原理与实现介绍(2023-07-03)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)