学习设计模式一定要知道它是为了什么而产生的,凡事一定有原因。

站在巨人的肩膀上学习,推荐两篇文章

  什么是php工厂模式?为何要用php工厂模式?

  php工厂模式的使用实例总结

  PHP设计模式之工厂模式

--

设想一种情况:

  现在我们在我们程序里面 新建了一个 mysqli 扩展的类,里面封装了数据库的一系列操作。

  在我需要的时候,我会使用 new mysqli() 来调用我的数据库封装方法。

  但是,有一天,我发现 mysqli 不好用了,我想用 PDO 了。

  那么......

  我在我的程序里面已经使用了成百次的 new mysqli 这个类,难道还是需要一个个去改么?

--

上面已经说明了在普通时候的尴尬性,所以我们需要来对这类进行解耦。

现在才感受到了“高内聚低耦合”的博大精深。没问题,工厂方法可以解决这个问题。

工厂模式的优点就在创建对象上。

工厂模式的优点就在创建对象上。建立一个工厂(一个函数或一个类方法)来制造新的对象,它的任务就是把对象的创建过程都封装起来,

创建对象不是使用new的形式了。而是定义一个方法,用于创建对象实例。

--

说道这里,反正我已经是蒙了,总的来说,工厂模式的目的是为了把新建对象的过程封装起来,只返回对象的结果

--

下面我们用代码来实现下

1:简单工厂模式

【适用范围】

工厂类负责创建的对象较少,操作时只需知道传入工厂类的参数即可,对于如何创建对象过程不用关心。

<?php
class A {}

class B {}

class Factoty
{
    // 简单工厂里的静态方法-用于创建A对象
    static function createA()
    {
        return new A();
    }

    // 简单工厂里的静态方法-用于创建B对象
    static function createB()
    {
        return new B();
    }
}
$A = Factoty::createA();
$B = Factoty::createB();

这里我们隐藏了实例对象的细节,在对于对象修改中只需要修改简单的代码就可以完成。

但是他不适合对象的反复添加,只适合固定的对象。

--

2:工厂方法模式

【适用范围】

  一个类希望由子类来指定它所创建的对象时,简单来说,就是希望父类的实现方式可以以子类的继承实现,这样可以扩展出不同的类,也体现的类的多态。

// 定义一个接口类
interface  people
{
    public function  create();
}

// 由子类来继承实现
class Factory implements people
{
    public function create()
    {
        return new A();
    }
}

这样可以一直扩展多个子类。并且有好的扩展性。

--

其实关于工厂模式,一定要找到他的重点,他想干什么?

工厂模式主要就是为了解决在创建对象上产生的高耦合,使他们可以模块化,松散的组合在一起。

只要我们知道他想干什么,工厂模式可以有很多方式来实现。

2018/04/16 PHP 设计模式之工厂模式的更多相关文章

  1. 5. 星际争霸之php设计模式--抽象工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  2. 3. 星际争霸之php设计模式--简单工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  3. 设计模式——抽象工厂模式及java实现

    设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...

  4. iOS 设计模式之工厂模式

    iOS 设计模式之工厂模式 分类: 设计模式2014-02-10 18:05 11020人阅读 评论(2) 收藏 举报 ios设计模式 工厂模式我的理解是:他就是为了创建对象的 创建对象的时候,我们一 ...

  5. 设计模式之工厂模式(Factory)

    设计模式的工厂模式一共有三种:简单工厂模式,工厂模式,抽象工厂模式 简单工厂模式原理:只有一个工厂类,通过传参的形式确定所创建的产品对象种类 代码如下: #include <stdio.h> ...

  6. php设计模式:工厂模式

    php设计模式:工厂模式 意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类. 工厂模式实现: 工厂模式中任何创建对象的工厂类都要实现这个接口,实现接口的方法体中都要实现接口中的方法,它声明 ...

  7. 浅析JAVA设计模式之工厂模式(一)

    1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...

  8. java 设计模式之工厂模式与反射的结合

    工厂模式: /**  * @author Rollen-Holt 设计模式之 工厂模式  */   interface fruit{     public abstract void eat(); } ...

  9. C#学习之设计模式:工厂模式

    最近研究一下设计模式中工厂模式的应用,在此记录如下: 什么是工厂模式? 工厂模式属于设计模式中的创造型设计模式的一种.它的主要作用是协助我们创建对象,为创建对象提供最佳的方式.减少代码中的耦合程度,方 ...

随机推荐

  1. Kafka与Flink集成

    Apache Flink是新一代的分布式流式数据处理框架,它统一的处理引擎既可以处理批数据(batch data)也可以处理流式数据(streaming data).在实际场景中,Flink利用Apa ...

  2. linux系统开机自启程序-需要-root用户 -启动 -

    #!/bin/bashsh /home/hwjc/RSA/release2017-02-23/release2017-02-23/install.shsh /etc/init.d/mqtt.shifc ...

  3. YII2 model 字段验证提示 Unknown scenario: update

    意思是 update 场景不存在,也就是 定义的 rules 中没有该规则: /** * @inheritdoc * 验证规则 */ public function rules() { return ...

  4. HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP错误解决方法

    在树莓派上运行在windows上正确的程序,  报错: HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP OpenCV Error: Assertion failed (s ...

  5. linux多行注释

    1.多行注释:   1. 首先按esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块)模式;   2. 在行首使用上下键选择需要注释的多行;   3. 按下键盘(大写)“I”键,进入插入模式 ...

  6. java高级---->Thread之Phaser的使用

    Phaser提供了动态增parties计数,这点比CyclicBarrier类操作parties更加方便.它是jdk1.7新增的类,今天我们就来学习一下它的用法.尘埃落定之后,回忆别来挑拨. Phas ...

  7. 【Spring】依赖注入 加载顺序

    一.Spring依赖注入depents-on参数 depents-on是指指定Bean初始化及销毁时的顺序,使用depends-on属性指定的是Bean要先初始化完毕后才初始化当前Bean,由于只有S ...

  8. git 命令自动补全

    下载 Git 的源代码 使用如下命令即可下载: git clone https://github.com/git/git 复制 git-completion.bash 源代码下有个 contrib/c ...

  9. Elasticsearch学习之深入搜索四 --- cross-fields搜索

    1. cross-fields搜索 一个唯一标识,跨了多个field.比如一个人,标识,是姓名:一个建筑,它的标识是地址.姓名可以散落在多个field中,比如first_name和last_name中 ...

  10. dirname的用法:获取文件的父级目录路径

    命令:dirname 获取文件的路径(到父级目录)用法:dirname file_name [root@bogon opt]# a=$(dirname /mnt/a/b/c/d/a.sh) [root ...