分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

PHP设计模式 -- 工厂模式

发布时间:2023-09-06 01:55责任编辑:蔡小小关键词:PHP

概念

1、工厂设计模式提供获取某个对象的新实例的一个接口,同时使调用代码避免确定实际实例化基类步骤。
2、很多高级模式都是依赖于工厂模式。

好处

1、PHP中能够创建基于变量内容的类的新实例,减少主代码流中的基于条件复杂性;2、同时如果类发生改变不需要所有的地方进行修改,只需要在工厂中进行修改3、(无论对象被修改或者添加其他对象,Factory对象调用方式仍让是相同的)(集中实例化)

应用场景

1、做支付接口的时候,未来可能对应不同的支付网关:支付宝、财付通、网银在线等。
2、方便未来扩展,设计成工厂模式。定一个专门生产网关接口的工厂,抽象出来,3、做成接口形式,让所有的子类都要实现它的接口。
4、以后加一个支付方式,要使用哪一种支付方式,改变一下参数即可。
5、在为用户注册的时候,分为很多种角色的用户。
6、比如册用户,匿名用户、管理员用户等。完全使用可以使用工厂的思想来实现,7、代码也容易维护,为每种角色可以生成操作的类等等。
8、系统对接多个不同类型的数据库,mysql,oracle,sqlserver

示例代码

简单工厂模式Factory,提供一个工厂方法供客户端调用。可能违反开闭原则。
<?php// 定义一个接口interface Db{  public function conn();}/** *@class 服务端开发(不知道谁将会被调用) * */class Dbmysql implements Db{ ???public function conn() { ???????echo ‘连接上了Mysql‘; ???}}class Dbsqlite implements Db{ ???public function conn() { ???????echo ‘连接上了sqlite‘; ???}}/** *@class 简单工厂,工厂方法 * */class Factory{ ???public static function ?createDb($type = ‘‘) { ???????if($type == ‘mysql‘) { ???????????return new dbmysql(); ???????}elseif($type == ‘sqlite‘) { ???????????return new dbsqlite(); ???????}else{//报错 ???????????throw new Exception("Error db type", 1); ???????} ???}}/** *@class 客户端看不到dbmysql dbsqlite内部细节的,只是知道接口 *///只知道服务端开放了一个Factory::createDb()方法//方法只允许传递数据库名称,如果新增一个oracle需要修改Factory(比较麻烦)//面向对象设计法则中,重要的开闭原则--对于修改是封闭的,对于扩展是开放的。$db = Factory::createDb(‘mysql‘);$db = Factory::createDb(‘sqlite‘);$db->conn();

示例二: 通过传入不同参数

class CdFactory{ ???????public static function create($type) ???????{ ???????????$class = strtolower($type) . "CD"; ???????????return new $class; ???????}}//通过传入不同的参数来实例化不同的对象;统一在工厂类中进行实例化$type = ‘enhanced‘;$cd = CdFactory::create($type);$type = ‘‘;$my_cd = CdFactory::create($type);

PHP设计模式 -- 工厂模式

原文地址:https://www.cnblogs.com/chenhaoyu/p/9063380.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved