工厂
工厂模式 ==> 创建产品模式
根据直接生产产品,还是通过“外加工工厂”生产产品,可以分为“简单工厂模式”,“工厂方法模式”,“抽象工厂模式”,具体下如图
graph LR
工厂模式 --返回具体产品,产品有相同方法--> 具体产品
具体产品 --> 简单工厂模式
工厂模式 --返回具体工厂,工厂有相同产品--> 具体工厂
具体工厂 --一种产品,且产品有相同方法--> 工厂方法模式
具体工厂 --多种产品,且产品有相同方法--> 抽象工厂模式
简单工厂模式

手机代工厂
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <?php declare(strict_types=1);
class PhoneFactory { public function makeMiPhone(){ return new MiPhone(); } public function makeIPhone(){ return new IPhone(); } public function makePhone(string $name){ if($name == 'MiPhone'){ return new MiPhone(); } if($name == 'IPhone'){ return new IPhone(); } } }
|
手机
1 2 3 4 5 6 7
| <?php
interface Phone { public function callout(string $name); public function sendMsg(string $msg); }
|
小米手机
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?php
class MiPhone implements Phone { public function callout(string $name) { var_dump('MiPhone callout'); } public function sendMsg(string $msg) { var_dump('MiPhone sendMsg'); } }
|
苹果手机
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?php
class IPhone implements Phone { public function callout(string $name) { var_dump('IPhone callout'); } public function sendMsg(string $msg) { var_dump('IPhone sendMsg'); } }
|
演示
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?php
$factory = new PhoneFactory(); $miPhone = $factory->makeMiPhone(); $iPhone = $factory->makeIPhone(); $iPhonePro = $factory->makePhone("IPhone"); $miPhone->callout('张三'); $miPhone->sendMsg('大家好'); $iPhone->callout('张三'); $iPhone->sendMsg('大家好'); $iPhonePro->callout('张三'); $iPhonePro->sendMsg('大家好');
|
工厂方法模式(Factory Method)

工厂的抽象类
1 2 3 4 5 6
| <?php
interface AbstractFactory { public function makePhone(); }
|
小米手机工厂
1 2 3 4 5 6 7 8 9
| <?php
class XiaoMiFactory implements AbstractFactory { public function makePhone() { return new MiPhone(); } }
|
苹果手机工厂
1 2 3 4 5 6 7 8 9
| <?php
class AppleFactory implements AbstractFactory { public function makePhone() { return new IPhone(); } }
|
演示
1 2 3 4 5 6 7 8 9
| <?php
$xiaomifactory = new XiaoMiFactory(); $applefactory = new AppleFactory();
$miPhone = $xiaomifactory->makePhone(); $iPhone = $factory->makePhone();
|
抽象工厂模式(Abstract Factory)

小米工厂
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?php
class XiaoMiFactory implements AbstractFactory { public function makePhone() { return new MiPhone(); } public function makePC() { return new MiPC(); } }
|
苹果工厂
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?php
class AppleFactory implements AbstractFactory { public function makePhone() { return new IPhone(); } public function makePC() { return new Mac(); } }
|
演示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?php
public function start(){ $appleFactory = new AppleFactory(); $xiaomiFactory = new XiaoMiFactory(); $this->doJob($appleFactory); $this->doJob($xiaomiFactory); }
public function doJob($factory){ $myPhone = $factory->makePhone(); $myPC = $factory->makePC(); $myPhone->sendMsg('大家好'); $myPC->sendMsg('大家好'); }
|