php工厂模式及laravel中工厂模式
工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类
应用场景:连接数据库,可以使用mysql 、mysqli、pdo,根据不同参数配置使用不同的数据库操作类
做支付接口的时候,未来可能对应不同的支付网关:支付宝、财付通、网银在线等。
方便未来扩展,设计成工厂模式。定一个专门生产网关接口的工厂,抽象出来,
做成接口形式,让所有的子类都要实现它的接口。
以后加一个支付方式,要使用哪一种支付方式,改变一下参数即可。
在为用户注册的时候,分为很多种角色的用户。
比如册用户,匿名用户、管理员用户等。完全使用可以使用工厂的思想来实现,
代码也容易维护,为每种角色可以生成操作的类等等。
<?php /*** Created by PhpStorm.* User: Ty_Ro* Date: 2019/1/15* Time: 10:35*//*** 抽象产品(共同接口)* @定义一个工厂接口*/ interface mysql{public function connect(); }/*** Class mysqli2* 具体产品实现* @实现这个接口*/ class mysqli2 implements mysql{public function connect(){echo 'mysqli';} }/*** Class pdo2* 具体产品实现* @实现这个接口*/ class pdo2 implements mysql{public function connect(){echo 'pdo';} }/*** Class mysqlFactory* 通过传入不同的参数来实例化不同的对象;统一在工厂类中进行实例化*/ class mysqlFactory{static public function factory($class_name){return new $class_name();}}$obj = mysqlFactory::factory('pdo2'); $obj->connect();
class mysqlFactory{
static public function factory($class_name){
return new $class_name();
}
}
$obj = mysqlFactory::factory('pdo2');
$obj->connect();
在laravel中使用工厂模式需要注意命名空间,否则容易报错类找不到
工厂类:
<?php /*** Created by PhpStorm.* User: Ty_Ro* Date: 2019/1/15* Time: 10:35*/ namespace App;interface mysql{public function connect(); }class mysqli2 implements mysql{public function connect(){echo 'mysqli';} }class pdo2 implements mysql{public function connect(){echo 'pdo';} }class MyFactory {/*** @var array*/protected $typeList;/*** 你可以在这里注入自己的车子类型*/public function __construct(){$this->typeList = array('pdo2' => __NAMESPACE__ . '\pdo2','mysqli2' => __NAMESPACE__ . '\mysqli2');}public function factory($type){if (!array_key_exists($type, $this->typeList)) {throw new \InvalidArgumentException("$type is not valid vehicle");}$className = $this->typeList[$type];return new $className();}}
调用工厂类
<?php /*** Created by PhpStorm.* User: Ty_Ro* Date: 2019/1/15* Time: 10:27*/namespace App\Http\Controllers\DesignMode;use App\Http\Controllers\Controller; use App\MyFactory;class FactoryPatternController extends Controller {public function newFactory() {$obj = new MyFactory;$obj->factory('pdo2')->connect();} }
php工厂模式及laravel中工厂模式相关推荐
- 8086的两种工作模式_8086系统中最小模式与最大模式两种工作方式的主要区别是什么?...
展开全部 最小模式和最大模式的主要区别为以下几方面: 1.处理系统方面 最小模式:系统里e68a843231313335323631343130323136353331333366306533就808 ...
- android mvp模式例子_Android中mvp模式使用实例详解
MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负 责显示.作为一种新的模式,MVP与MVC有着一 ...
- python在工厂中的应用_什么是工厂函数?Python 中工厂函数怎么理解?
其实谈工厂函数前必须首先把嵌套作用域和闭包讲清楚 python有一个很有意思的地方,就是def函数可以嵌套在另一个def函数之中.调用外层函数时,运行到的内层def语句仅仅是完成对内层函数的定义,而不 ...
- 设计模式-工厂模式的3中不同实现[JAVA]
设计模式-工厂模式的3中不同实现[JAVA] 工厂模式简介 In Factory pattern, we create object without exposing the creation log ...
- android menu夜间模式,Android常用技巧夜间模式开发浅析
前言 Android的夜间模式主要主用于阅读方面,在QQ,微信读书,新闻阅读类一般会有相应的功能,本文主要介绍整体APP的夜间模式以及webview中夜间模式的实现. 效果图展示 功能实现简介 APP ...
- java设计模式中不属于创建型模式_23种设计模式第二篇:java工厂模式定义:工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式...
23种设计模式第二篇:java工厂模式 定义: 工厂模式是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 工厂模式主要是为创建对象提供过渡接口, ...
- mave工程中的一个类调用另一个聚合工程的一个类_谈谈设计模式:建造者模式在jdk中的体现,它和工厂模式区别?...
背景 建造模式(Builder模式) 假如有一个需求:盖房子,盖房子过程是一致的:打桩.砌墙.封顶.但是房子是各式各样的,最后盖出来的房子可能是高楼或别墅. 根据直接的思路,不用设计模式思想,我们也许 ...
- java中的工厂模式_java中工厂模式详解和使用方法
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻 ...
- 手把手教你应用三种工厂模式在SpringIOC中创建对象实例【案例详解】
目录 一.工厂模式介绍 二.通过静态工厂方法创建Bean实例 三.通过实例工厂方法创建Bean实例 四.通过自定义的factoryBean来创建bean对象 Hello,你好呀,我是灰小猿!一个超会写 ...
最新文章
- 如何到top5%?NLP-情感分析实战训练来教你!
- Django Rest Framework
- 批处理——服务器的web文件备份
- C#算法设计查找篇之02-二分查找
- Spring4.0编程式定时任务配置
- 解除工作压力的四大疗法
- opcache引起的“php-cgi.exe - FastCGI 进程意外退出”,事件ID487
- 如何在 iPhone 和 iPad 上使用语音备忘录?
- win10 开机启动_win10 -- 取消不需要的开机启动项和服务项加快win10系统开机速度...
- 汇编中DOSBox的使用
- 如何下载Chrome历史版本
- Windows Server 2019 安装应用商店
- python模拟鼠标拖动_python模拟鼠标拖动教程
- laravel admin grid文档
- Java -- 每日一问:谈谈常用的分布式ID的设计方案?Snowflake是否受冬令时切换影响?
- 使用espressos idlingresource获得最高的Android测试速度
- BPM业务流程管理的前世今生
- 2019腾讯游戏客户端面试
- 前端面试技巧和注意事项_web前端没有项目经验怎么应对面试?(技巧) -
- 【scrapy 动态配置爬虫】同进程多爬虫,基础事例