搜索
首页php教程php手册PHP五种常用的设计模式工厂模式

PHP五种常用的设计模式——工厂模式

一直对设计模式有一种敬畏之心,每次想要看设计模式的时候就会想到Erich GammaRichard HelmRalph JohnsonJohn Vlissides的黑皮《设计模式》,基本都望而止步,要把那本书看完可不是一时半会的,而且在没有项目经验的情况下,个人感觉基本都是纸上谈兵。

今天在IBM Developerworks上看到一篇文章将PHP中常用的五种设计模式,感觉还不错,而且只有五种五种五种(重要的强调三遍)!先从简单的入手,把这五种消灭了再说。以后慢慢学习其他的设计模式。

工厂模式(Factory Pattern

工厂这个词的使用是非常形象,字面意思可以这样认为,这种模式下,我们有一个工厂,这个工厂生产很多一种或者几种产品(其实多种的情况是覆盖了一种的),但是每个产品怎么生产和包装的我们不知道,其实我们也不需要知道,知道的越多你就越迷糊,以后你的行为就受制于太多杂事,也就是我们常说的耦合度太高,因此我们就将所有的事情交给工厂负责,我们只用告诉工厂需要什么,工厂把产品交付给你就是了。一旦产品的工艺发生改变,工厂负责就好,你使用该产品的工艺不受影响。因此工厂模式可以大大的降低系统的耦合度,增强系统的稳定性,当然也会提高代码的复用率。

在实际的程序设计中,工厂相当于一个对外的接口,那么这个接口的返回类型是确定的,那么我们怎么通过这个工厂来生产不同的产品发回给客户呢?很简单,做一个所有产品的“模子”就可以,这个“模子”有每个产品的所有特征,但是不能用,需要具体的产品实现这些特性,就是我们常说的Interface
使用类图表示如下:

PHP的实现
编写一个接口 Product.php
<code class="hljs" java=""><!--?php
/**
* Created by PhpStorm.
* User: Defei
* Date: 2015/8/8
* Time: 16:14
*/

interface Product{
    public function getName();
}</code--></code>
设计一个产品<code>A实现Product接口
<code class="hljs" java=""><code class="hljs" xml=""><!--?php
/**
* Created by PhpStorm.
* User: Defei
* Date: 2015/8/8
* Time: 16:16
*/

class ProductA implements Product{

    public function getName(){
        // TODO: Implement getName() method.
        echo '我是产品A';
    }
}</code--></code></code>
<code class="hljs" xml="">设计产品<code>B实现Product接口
<code class="hljs" java=""><code class="hljs" xml=""><code class="hljs" xml=""><!--?php
/**
* Created by PhpStorm.
* User: Defei
* Date: 2015/8/8
* Time: 16:17
*/

class ProductB implements Product{

    public function getName(){
        // TODO: Implement getName() method.
        echo '我是产品B';
    }

}</code--></code></code></code>
<code class="hljs" xml=""><code class="hljs" xml="">建造一座工厂生产产品<code>AB
<code class="hljs" java=""><code class="hljs" xml=""><code class="hljs" xml=""><code class="hljs" java=""><!--?php
/**
* Created by PhpStorm.
* User: Defei
* Date: 2015/8/8
* Time: 16:18
*/
class ProductFactory{

    /**
     * @param $product_name
     * @return mixed
     */
    public function factory($product_name){
        return new $product_name; //PHP可以使用名字直接new一个同名的对象这个很方便
    }

}</code--></code></code></code></code>
<code class="hljs" xml=""><code class="hljs" xml=""><code class="hljs" java="">测试

<code class="hljs" xml=""><code class="hljs" xml=""><code class="hljs" java="">产品<code>AB已经设计好了,工厂也建好了,下一步就是测试一下这个工厂对的生产能力如何。

<code class="hljs" java=""><code class="hljs" xml=""><code class="hljs" xml=""><code class="hljs" java=""><code class="hljs" xml=""><!--?php
/**
* Created by PhpStorm.
* User: Defei
* Date: 2015/8/8
* Time: 16:20
*/
include 'ProductFactory.php';
include 'Product.php';
include 'ProductA.php';
include 'ProductB.php';

$factory = new  ProductFactory();
echo $factory--->factory(&#39;ProductA&#39;)->getName().PHP_EOL;
echo $factory->factory(&#39;ProductB&#39;)->getName();
</code></code></code></code></code>

<code class="hljs" xml=""><code class="hljs" xml=""><code class="hljs" java="">输出结果如下:<br>

 

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用