简单工厂模式违反了开闭原则还有单一职责原则,工厂方法模式是对简单工厂模式的进一步抽象。
工厂方法模式的优缺点
优点:
缺点:
具体代码
AbstractFactory.php
<?php
namespace App\Creational\Factory;
abstract class AbstractFactory
{
abstract static public function make();
}
<?php
namespace App\Creational\Factory;
class IphoneFactory extends AbstractFactory
{
static public function make(){
return new Iphone();
}
}
<?php
namespace App\Creational\Factory;
class XiaomiFactory extends AbstractFactory
{
static public function make(){
return new Xiaomi();
}
}
<?php
namespace App\Creational\Factory;
abstract class AbstractPhone
{
abstract public function playMusic();
abstract public function playVideo();
}
<?php
namespace App\Creational\Factory;
class Xiaomi extends AbstractPhone
{
public function playVideo()
{
// TODO: Implement playVideo() method.
}
public function playMusic()
{
// TODO: Implement playMusic() method.
}
}
<?php
namespace App\Creational\Factory;
class Iphone extends AbstractPhone
{
public function playVideo()
{
// TODO: Implement playVideo() method.
}
public function playMusic()
{
// TODO: Implement playMusic() method.
}
}
测试代码
<?php
class FactoryTest extends \PHPUnit\Framework\TestCase
{
public function testPhoneProcut()
{
$phone = \App\Creational\Factory\IphoneFactory::make();
$this->assertInstanceOf(\App\Creational\Factory\Iphone::class, $phone);
}
}
原文:https://www.cnblogs.com/ouguangqiang/p/14214227.html