您的位置:首页 > 编程语言 > PHP开发

PHP实现工厂模式

2014-11-13 15:45 369 查看
【特点】

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类

【工厂模式的优缺点】

工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。

客户可能仅仅为了创建一个特定的ConcreteProduct对象,就不得不创建一个Creator子类

【工厂模式适用场景】

1、当一个类不知道它所必须创建的对象的类的时候

2、当一个类希望由它的子类来指定它所创建的对象的时候
3、当类将创建对象的职责委托给多个帮助子类的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候

<?php

/**
* 抽象工厂角色
*
*/
interface Creator
{
public function factoryMethod();
}

/**
* 具体工厂角色A
*
*/
class ConcreteCreatorA implements Creator
{

/**
* 工厂方法 返回具体 产品A
*
* @return ConcreteProductA
*/
public function factoryMethod()
{
return new ConcreteProductA();
}
}

/**
* 具体工厂角色B
*
*/
class ConcreteCreatorB implements Creator
{

/**
* 工厂方法 返回具体 产品B
*
* @return ConcreteProductB
*/
public function factoryMethod()
{
return new ConcreteProductB();
}
}

/**
* 抽象产品角色
*
*/
interface Product
{
public function operation();
}

/**
* 具体产品角色A
*
*/
class ConcreteProductA implements Product
{

/**
* 接口方法实现 输出特定字符串
*/
public function operation()
{
echo 'ConcreteProductA <br />';
}
}

/**
* 具体产品角色B
*
*/
class ConcreteProductB implements Product
{

/**
* 接口方法实现 输出特定字符串
*
*/
public function operation()
{
echo 'ConcreteProductB <br />';
}
}

class Client
{

/**
* Main program.
*/
public static function main()
{
$creatorA = new ConcreteCreatorA();
$productA = $creatorA->factoryMethod();
$productA->operation();

$creatorB = new ConcreteCreatorB();
$productB = $creatorB->factoryMethod();
$productB->operation();
}

}

Client::main();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息