目录
PHP五种常用的设计模式——工厂模式
工厂模式(Factory Pattern
测试" >测试
首页 php教程 php手册 PHP五种常用的设计模式工厂模式

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

Jun 13, 2016 am 08:56 AM
工厂 常用 设计模式

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无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Java框架中设计模式与架构模式的区别 Java框架中设计模式与架构模式的区别 Jun 02, 2024 pm 12:59 PM

在Java框架中,设计模式和架构模式的区别在于:设计模式定义了在软件设计中解决常见问题的抽象解决方案,关注类和对象之间的交互,如工厂模式。架构模式定义了系统结构和模块之间的关系,关注系统组件的组织和交互,如分层架构。

Java设计模式之装饰器模式剖析 Java设计模式之装饰器模式剖析 May 09, 2024 pm 03:12 PM

装饰器模式是一种结构型设计模式,允许动态添加对象功能,无需修改原始类。它通过抽象组件、具体组件、抽象装饰器和具体装饰器的协作实现,可以灵活扩展类功能,满足变化的需求。示例中,将牛奶和摩卡装饰器添加到Espresso,总价为2.29美元,展示了装饰器模式在动态修改对象行为方面的强大功能。

Java设计模式之适配器模式的妙用 Java设计模式之适配器模式的妙用 May 09, 2024 pm 12:54 PM

适配器模式是一种结构型设计模式,允许不兼容对象协同工作,它将一个接口转换为另一个,使对象能够顺利交互。对象适配器通过创建包含被适配对象的适配器对象,并实现目标接口,实现适配器模式。在一个实战案例中,通过适配器模式,客户端(如MediaPlayer)可以播放高级格式的媒体(如VLC),尽管其本身仅支持普通媒体格式(如MP3)。

15个常用的币圈逃顶指标技术分析 15个常用的币圈逃顶指标技术分析 Mar 03, 2025 pm 05:48 PM

十五大比特币逃顶指标深度解析:2025年市场展望本文深入分析了十五个常用的比特币逃顶指标,其中比特币Rhodl比率、USDT活期理财和山寨币季节指数已于2024年触及逃顶区间,引发市场关注。面对潜在风险,投资者该如何应对?让我们逐一解读这些指标,并探讨合理的应对策略。一、关键指标详解AHR999囤币指标:由ahr999创建,辅助比特币定投策略。当前值为1.21,处于观望区间,建议谨慎。链接AHR999逃顶指标:AHR999囤币指标的补充,用于识别市场顶部。当前值为2.48,本周

PHP 设计模式实战案例解析 PHP 设计模式实战案例解析 May 08, 2024 am 08:09 AM

1.工厂模式:分离对象创建和业务逻辑,通过工厂类创建指定类型的对象。2.观察者模式:允许主题对象通知观察者对象其状态更改,实现松耦合和观察者模式。

PHP设计模式:测试驱动开发实践 PHP设计模式:测试驱动开发实践 Jun 03, 2024 pm 02:14 PM

TDD用于编写高质量PHP代码,步骤包括:编写测试用例,描述预期功能并使其失败。编写代码,仅使测试用例通过,无需过分优化或详细设计。测试用例通过后,优化和重构代码以提高可读性、可维护性和可扩展性。

设计模式如何应对代码维护难题 设计模式如何应对代码维护难题 May 09, 2024 pm 12:45 PM

设计模式通过提供可重用和可扩展的解决方案来解决代码维护难题:观察者模式:允许对象订阅事件,并在事件发生时收到通知。工厂模式:提供了一种创建对象的集中式方式,而无需依赖具体类。单例模式:确保一个类只有一个实例,用于创建全局可访问的对象。

java框架中使用设计模式的优缺点有哪些? java框架中使用设计模式的优缺点有哪些? Jun 01, 2024 pm 02:13 PM

Java框架中使用设计模式的优点包括:代码可读性、可维护性和可扩展性增强。缺点包括:过度使用导致复杂性、性能开销以及学习曲线陡峭。实战案例:代理模式用于延迟加载对象。明智地使用设计模式可充分利用其优势并最小化缺点。

See all articles