工厂方法模式
简单工厂模式违反了开闭原则还有单一职责原则,工厂方法模式是对简单工厂模式的进一步抽象。
工厂方法模式的优缺点
优点:
- 用户创建实例时不需要知道知道具体类,而只需要知道工厂类;
- 新建一个产品,只需要新建一个相应的类;
缺点:
- 类的个数将会越来越多;
- 增加系统抽象度,更加难以理解;
- 抽象产品只能生产一种产品。
具体代码
AbstractFactory.php
<?php
namespace AppCreationalFactory;
abstract class AbstractFactory
{
abstract static public function make();
}
<?php
namespace AppCreationalFactory;
class IphoneFactory extends AbstractFactory
{
static public function make(){
return new Iphone();
}
}
<?php
namespace AppCreationalFactory;
class XiaomiFactory extends AbstractFactory
{
static public function make(){
return new Xiaomi();
}
}
<?php
namespace AppCreationalFactory;
abstract class AbstractPhone
{
abstract public function playMusic();
abstract public function playVideo();
}
<?php
namespace AppCreationalFactory;
class Xiaomi extends AbstractPhone
{
public function playVideo()
{
// TODO: Implement playVideo() method.
}
public function playMusic()
{
// TODO: Implement playMusic() method.
}
}
<?php
namespace AppCreationalFactory;
class Iphone extends AbstractPhone
{
public function playVideo()
{
// TODO: Implement playVideo() method.
}
public function playMusic()
{
// TODO: Implement playMusic() method.
}
}
测试代码
<?php
class FactoryTest extends PHPUnitFrameworkTestCase
{
public function testPhoneProcut()
{
$phone = AppCreationalFactoryIphoneFactory::make();
$this->assertInstanceOf(AppCreationalFactoryIphone::class, $phone);
}
}