美文网首页
PHP设计模式-工厂模式

PHP设计模式-工厂模式

作者: 木有sky | 来源:发表于2019-02-17 10:07 被阅读0次

适用性

工厂设计模式提供获取某个对象的新实例的一个接口,同时使调用代码避免确定实际实例化基类的步骤。

UML

代码示例

为了管理控制CD,应用程序需要将必要的信息编辑入CD 对象。然后传递出去。完成CD创建工作。CD 对象需要包含标题,乐队名称,曲目列表。

class cd

{

public $title = '';

public $band = '';

public $track = array();

public function __construct()

{

}

public function setTitle($title)

{

$this->title = $title;

}

public function setBand($band)

{

$this->band = $band;

}

public function addTrack($track)

{

$this->track[] = $track;

}

}

为了创建完整的CD对象。处理过程相同: 创建一个CD类的实例,然后添加标题,乐队名称,曲目列表。

$title = 'Waste of a Rib';

$band = 'Never Again';

$tracksFromExternalSoutce = array('What It Means','Brrr','Goodbye');

$cd = new CD();

$cd->setTitle($title);

$cd->setBand($band);

foreach ($tracksFromExternalSoutce as $track ){

$cd->addTrack($track);

}

输出:

object(cd)#1 (3) {

  ["title"]=>

  string(14) "Waste of a Rib"

  ["band"]=>

  string(11) "Never Again"

  ["track"]=>

  array(3) {

    [0]=>

    string(13) "What It Means"

    [1]=>

    string(4) "Brrr"

    [2]=>

    string(7) "Goodbye"

  }

}

如今,某些艺术家在他们的CD上发布了在计算机中能够使用的其他内容。这些CD称为增强型CD。写至光盘的第一个音轨是数据音轨。管理控制软件通过其他标签DATA TRACK识别数据音轨,并且创建相应的CD对象。

class enhancedCD

{

public $title = '';

public $band = '';

public $track = array();

public function __construct()

{

$this->track[] = 'DATA TRACK';

}

public function setTitle($title)

{

$this->title = $title;

}

public function setBand($band)

{

$this->band = $band;

}

public function addTrack($track)

{

$this->track[] = $track;

}

}

查看上述共性和认识到只可能存在两种CD类型之后,似乎我们只需要创造条件语句。如果CD类型是增强型CD,那么就创建enhancedCD类的实例。否则,就应创建通用CD类。然而更好的解决方案:使用工厂设计模式。 CDFactory类使用了PHP根据比变量动态实例化一个类的能力。create()方法接受被请求类的类型并返回类的一个实例:

class CDFactry

{

public static function create($type)

{

$class = strtolower($type).'CD';

return new $class;

}

}

现在,类的创建和执行变化反应了Factory 类的用法:

$type = 'enhanced';

$cd = CDFactry::create($type);

$cd->setBand($band);

$cd->setTitle($title);

foreach ($tracksFromExternalSoutce as $track ){

$cd->addTrack($track);

}

输出:

object(enhancedCD)#2 (3) {

  ["title"]=>

  string(14) "Waste of a Rib"

  ["band"]=>

  string(11) "Never Again"

  ["track"]=>

  array(4) {

    [0]=>

    string(10) "DATA TRACK"

    [1]=>

    string(13) "What It Means"

    [2]=>

    string(4) "Brrr"

    [3]=>

    string(7) "Goodbye"

  }

}

相关文章

  • PHP-浅谈单例模式和工厂模式

    PHP中常用的设计模式有单例模式、工厂模式(简单工厂模式、工厂方法模式和抽象工厂方法模式)、适配模式、策略模式。 ...

  • 《PHP设计模式大全》系列分享专栏

    php设计模式介绍之编程惯用法第1/3页 php设计模式介绍之值对象模式第1/5页 介绍php设计模式中的工厂模式...

  • 策略模式和工厂模式在促销系统下的应用

    策略模式和工厂模式在促销系统下的应用 标签: 设计模式 策略模式 工厂模式 促销系统 php 设计模式为我们提供了...

  • PHP完整实战23种设计模式

    前言 设计模式是面向对象的最佳实践 实战 PHP实战创建型模式 单例模式 工厂模式 抽象工厂模式 原型模式 建造者...

  • ThinkPHP设计模式与Trait技术

    阅读原文 设计模式 单例模式 工厂模式 对象注册树 示例 运行 Trait技术 自 PHP 5.4.0 起,PHP...

  • php 工厂模式

    承接上篇php模式设计之 单例模式,(虽然好像关系不大)。今天讲述第二种基础的模式设计——工厂模式。 那么何为工厂...

  • PHP完整实战23种设计模式

    前言设计模式是面向对象的最佳实践实战PHP实战创建型模式创建型 Factory Method(工厂方法)-工厂模式...

  • 设计模式全集 - 目录导视

    设计模式全集 - 目录导视 基础信息排版规范PHP 设计模式说明 创建型抽象工厂模式(Abstract Facto...

  • 设计模式四、抽象工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 抽象工厂模式 ...

  • 工厂模式

    java设计模式-工厂模式 工厂模式: 工厂模式是java设计模式里最常用的设计模式之一。 工厂模式属于创建型模式...

网友评论

      本文标题:PHP设计模式-工厂模式

      本文链接:https://www.haomeiwen.com/subject/dblieqtx.html