亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

【九月打卡】第3天 設計模式之工廠模式

標簽:
PHP 設計模式

课程名称:大话PHP设计模式

课程章节:工厂模式

课程讲师:Rango

课程内容:

特点

  • 由一个工厂类来管理项目中所有生成类的对象的代码

优点

  • 当项目中有多处使用new实例化类时,如果要修改实例化的类,会比较麻烦;而使用工厂模式后,只需要在工厂类中修改一处即可

工厂模式的类型

  • 工厂模式有多种类型(简单工程模式、工厂方法模式、抽象工厂模式),这里介绍为简单工厂模式,我还不清楚其它几种类型在项目中的实际作用

代码

class User{
  public function getUserName() {
    return "小明";
  }
}

class Factory{
  static public function createUser() {
    return new User();
  }
}

$a = Factory::createUser();
echo $a->getUserName();

// 输出:小明

User类是我们需要实例化的类,假如在项目中需要在多处实例化该类,那么当该类类名改变时,则需要在项目中多处修改该类的名字,比较麻烦。
如果使用一个工厂类来管理需要实例化的类,然后在项目的其它地方使用工厂类的方法来获取对象,可实现同样的效果,而如果要修改类名,则只需要在工厂类的方法中修改一处即可

工厂类内部的方法还有多种实现方式,比如一个php文件是一个类,文件都放到Drivers文件夹下,要扩展新的类时,只需要在该文件夹下新建对应的文件即可,比如新建了一个User文件,然后在项目中需要实例化该类的地方使用工厂类的对应方法来获取对象,具体实现如下(只看这段文字可能有点懵,可以结合代码来看)

    
<?php
class Example
{
    //带参数的工厂方法
    public static function factory($type)
    {
        if (include_once 'Drivers/' . $type . '.php') {
            $classname = 'Driver_' . $type;
            return new $classname;
        } else {
            throw new Exception('Driver not found');
        }
    }
}
// 实例化mysql类
$mysql = Example::factory('MySQL');
// 实例化sqlite类
$sqlite = Example::factory('SQLite');
?>

学设计模式学的是思想,具体的实现可以参考前人的,也可以发挥自己的奇思妙想,只要最终实现了,能写出可用性高、低耦合、优雅的代码就是好代码

课程收货

跟随Rango老师学习的第一个设计模式,除代码本身外,也学到了写代码的一些思想,以及设计模式在项目中的应用,虽然还是有些懵懂,但相信在接下来的项目实战中多运用所学到的知识一定可以掌握,活学活用!
图片描述

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消