工厂模式 是一种类,它具有为您创建对象的某些方法。您可以使用工厂类创建对象,而不直接使用 new。这样,如果您想要更改是所创建的对象类型,只需更改该工厂即可。使用该工厂的所有代码会自动更改。

比方说我们在网站上给用户制定一些任务让用户完成,不同的任务我们会创建不同的类,当用户完成某个任务的时候,会给用户一些对应的奖励,这个时候如果我们任务的类型比较多,那么我们可以采用工厂模式:<?php

//说明这里要引入对应的文件

class Task_Factory{

//任务列表的类数组

private $_arrClass = array();

//定义一个私有的静态变量,给生成实例的静态方法使用

private static $_obj = null;

//初始化任务类数组,前面是key,对应真正的类名

private function __construct(){

//发新浪微博任务

$this->addClass('sina_wb', 'Sinawb');

//发腾讯微博任务

$this->addClass('qq_wb', 'Qqwb');

//互动任务

$this->addClass('interact','Interact');

//连续签到任务

$this->addClass('sign', 'Sign');

}

//创建类的动作,定义为静态

public static function factory($tClass){

if (self::$_obj == null){

self::$_obj = new self();

}

if(!isset(self::$_obj->_arrClass[$tClass])){

//如果类不存在,返回false

return false;

}else{

//类存在则生成实例

$strClassName = self::$_obj->_arrClass[$tClass];

}

$ret = new $strClassName();

//这里Task_Base_Abstract是一个任务类的抽象类,定义了一些任务共有方法

//比方说任务完成进度,做任务等方法

if($ret instanceof Task_Base_Abstract){

//确认实例对象生成,则返回实例

return $ret;

}else{

//失败则返回false

return false;

}

}

//往数组里添加任务类,初始化时用

private function addClass($name, $RealName){

$this->_arrClass[$name] = $RealName;

}

}

这样,当我们要使用一个类时,可以如下调用://参数为对应的类的key

$objTask = Task_Factory::factory('interact');

php设计模式简单代码,PHP设计模式(1)工厂模式相关推荐

  1. 【设计模式2022】第四章 工厂模式

    [设计模式2022]第四章 工厂模式 文章目录 [设计模式2022]第四章 工厂模式 一.概述 二.简单工厂模式 1.结构 2.实现 3.分析 4.扩展 三.工厂方法模式 1.结构 2.实现 3.分析 ...

  2. JAVA设计模式是个什么玩意儿_00_工厂模式家族准备篇_简单工厂模式

    1. 前言 又叫静态工厂方法(Static Factory Method)模式. 它并不是GoF那23种设计模式之一. 简单工厂模式是工厂模式家族中最简单实用的模式. 虽然很简单,但它是学习工厂方法模 ...

  3. 设计模式学习笔记(三)工厂模式中的简单工厂、工厂方法和抽象工厂模式之间的区别

    设计模式中的工厂模式(Factory Design pattern)是一个比较常用的创建型设计模式,其中可以细分为三种:简单工厂(Simple Factory).工厂方法(Factory Method ...

  4. python 设计 实践_python实践设计模式(一)概述和工厂模式

    进修python有一段时候,之前就是看看书,最后发明只有实践才干真正学到器材,只有在解决题目中才干真正把握.之前大牛也有效python实现各类设计模式的,我本身参考之前在学惯用C#实现设计模式的经验, ...

  5. 设计模式你怎么看?--抽象工厂模式

    一  前言 在设计模式中有简单工厂,工厂方法,抽象工厂,这三种工厂方法,各自有各自的特点,但有都有共同的特点 工厂(Factory)都是围绕着工厂类转,这篇只写 "抽象工厂"相关的 ...

  6. 设计模式C++实现(1)——工厂模式

    转自:http://blog.csdn.net/wuzhekai1985/article/details/6660462 软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径.设计模式中 ...

  7. 伪代码的简单例子_使用策略+工厂模式彻底干掉代码中的if else!

    对于业务开发来说,业务逻辑的复杂是必然的,随着业务发展,需求只会越来越复杂,为了考虑到各种各样的情况,代码中不可避免的会出现很多if-else. 一旦代码中if-else过多,就会大大的影响其可读性和 ...

  8. 《Head First设计模式》第四章笔记 工厂模式

    之前我们一直在使用new操作符,但是实例化这种行为并不应该总是公开的进行,而且初始化经常会造成耦合问题,工厂模式将摆脱这种复杂的依赖,本次内容包括简单工厂,工厂方法和抽象工厂三种情况. 1 2 3 4 ...

  9. 设计模式之(四)抽象工厂模式(Abstract Factory)

    工厂模式已经分析了简单工厂模式和工厂方法模式.并且了解了工厂方法模式去简单工厂模式的延伸,工厂方法模式如果不把工厂类抽象的话,就是简单工厂模式.由前面两个工厂模式可以猜测出抽象工厂模式应该是这两种工厂 ...

最新文章

  1. 使用饼图_常见图表规范:直方图、圆环图和饼图
  2. 改变单选或者复选框的样式
  3. #修改margin_springboot+jpa+tymeleaf实现信息修改功能
  4. Java学习笔记--继承和多态(下)
  5. JAVA实验二——圆柱体
  6. 如何在学习机器学习时学习数学?
  7. 基于外键关联的一对多单向关联
  8. 解决PHPstorm菜单栏搜索栏乱码的问题
  9. Android Spinner设置默认选中的值
  10. 190122每日一句
  11. 超薄内置DSP数字功放芯片
  12. 浅谈App Hybrid混合开发的五种方案
  13. java编程 编写求解九宫格_java编程-九宫格问题
  14. 解决发送push的emoji表情的实用方案
  15. java append 报错_Append HDFS报错 is already the current lease holder
  16. 强烈建议你把这5个跨境神器都收藏了
  17. 中职计算机技术教学计划,中职计算机应用基础教学计划.doc
  18. 锂离子电池电压特性研究
  19. N1盒子丢失bootloader救砖方法
  20. 一个mysql安装问题的解决

热门文章

  1. CreateProcess failed: The system cannot find the file specified.
  2. oracle text db2,从Oracle 到DB2(一)
  3. linux c/c++ 判断是否为中文(不包括中文符号,非正则)
  4. java双等号比较字符串,Java与两个字符串==比较是错误的?
  5. python标准库导入语句有哪些_如何将python标准库缺失的进行导入?
  6. python语言跨平台语言吗_python属于跨平台语言吗?
  7. java里冒泡排序编程案例_java编程题:用Java实现一个冒泡排序算法
  8. $cfg_dbtype = mysql_多库操作2:终于实现多个数据库操作
  9. centos mysql 存储_Centos更改mysql数据存储文件位置
  10. 未定义与 double 类型的输入参数相对应的函数 eval_点评一下鸿蒙os的时钟计算函数...