php抽象工厂模式开发思路

抽象工厂模式是相对于工厂模式而言的

抽象工厂模式是对工厂模式的抽象,通俗来说,就是把工厂模式的结构分离出来成为能独立运行的个体。

还是拿工厂模式中的例子来说明:

现在有一个汽车工厂,它生产小汽车和巴士车,小汽车和巴士车都是由引擎、车身和轮子组成的。

在工厂模式中,我们把小汽车和巴士车作为汽车族群中的两个类别,生产引擎、车身和轮子为生产汽车的固定结构,如下图所示:

在抽象工厂模式中,把生产引擎、车身和轮子分别抽象出来,如下图所示:

实际部署为:

//生产引擎的标准

interface engineNorms{

function engine();

}

class carEngine implements engineNorms{

public function engine(){

return '汽车引擎';

}

}

class busEngine implements engineNorms{

public function engine(){

return '巴士车引擎';

}

}

//生产车身的标准

interface bodyNorms{

function body();

}

class carBody implements bodyNorms{

public function body(){

return '汽车车身';

}

}

class busBody implements bodyNorms{

public function body(){

return '巴士车车身';

}

}

//生产车轮的标准

interface whellNorms{

function whell();

}

class carWhell implements whellNorms{

public function whell(){

return '汽车轮子';

}

}

class busWhell implements whellNorms{

public function whell(){

return '巴士车轮子';

}

}

再继续对工厂进行抽象,抽象出汽车工厂和巴士车工厂,并且让各工厂与各组件相关联,如图:

实际部署为:

//生产引擎的标准

interface engineNorms{

function engine();

}

class carEngine implements engineNorms{

public function engine(){

return '汽车引擎';

}

}

class busEngine implements engineNorms{

public function engine(){

return '巴士车引擎';

}

}

//生产车身的标准

interface bodyNorms{

function body();

}

class carBody implements bodyNorms{

public function body(){

return '汽车车身';

}

}

class busBody implements bodyNorms{

public function body(){

return '巴士车车身';

}

}

//生产车轮的标准

interface whellNorms{

function whell();

}

class carWhell implements whellNorms{

public function whell(){

return '汽车轮子';

}

}

class busWhell implements whellNorms{

public function whell(){

return '巴士车轮子';

}

}

//工厂标准

interface factory{

static public function getInstance($type);

}

//汽车工厂

class carFactory implements factory{

static public function getInstance($type){

$instance='';

switch($type){

case 'engine':

$instance=new carEngine();

break;

case 'body':

$instance=new carBody();

break;

case 'whell':

$instance=new carWhell();

break;

default:

throw new Exception('汽车工厂无法生产这种产品');

}

return $instance;

}

}

//巴士车工厂

class busFactory implements factory{

static public function getInstance($type){

$instance='';

switch($type){

case 'engine':

$instance=new busEngine();

break;

case 'body':

$instance=new busBody();

break;

case 'whell':

$instance=new busWhell();

break;

default:

throw new Exception('巴士车工厂无法生产这种产品');

}

return $instance;

}

}

$car['engine']=carFactory::getInstance('engine')->engine();

$car['body']=carFactory::getInstance('body')->body();

$car['whell']=carFactory::getInstance('whell')->whell();

print_r($car);

$bus['engine']=busFactory::getInstance('engine')->engine();

$bus['body']=busFactory::getInstance('body')->body();

$bus['whell']=busFactory::getInstance('whell')->whell();

print_r($bus);

抽象工厂模式将工厂模式进行抽象,可以使得抽象出来的新结构更加的灵活。

例如,若生产车身需要一个喷漆的动作,在工厂模式中,我们需要对整体结构进行更改,而抽象工厂中,只需要对生产车身进行更改就ok了。

抽象工厂模式同样具有工厂模式对结构要求高的缺点,整体结构的扩展或精简将变得更加的烦杂,所以使用抽象工厂模式时,对等级结构的划分是非常重要的。 本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉 本文系统来源:php中文网

php抽象工厂模式开发,php抽象工厂模式开发思路相关推荐

  1. 编程模式 之美 -- 抽象工厂模式

    文章目录 1. 解决问题 2. 应用场景 3. 实现如下: C++实现 C语言实现 4. 缺点 1. 解决问题 在工厂方法模式中,我们卖衣服.此时我们为每一种衣服创建不同的工厂,帽子有一个工厂专门创建 ...

  2. 工厂三兄弟之抽象工厂模式

    本文转载自 :http://blog.csdn.net/lovelion/article/details/9319181 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但 ...

  3. (创建模式 上)设计模式——工厂、抽象工厂 C++/Python3实现

    简介 设计模式是为了解决一些出现的问题设计的解决方案.是长时间经验的总结,是根据不同问题从而提出并且实践出来的解决办法.使用不同的设计模式可以解决不同的问题. 设计模式可以分为三种大类别:分别是创建型 ...

  4. 【Java设计模式 设计模式与范式】创建型模式 四:抽象工厂模式

    本篇Blog继续学习创建型模式,创建型模式的主要关注点是怎样创建对象,它的主要特点是将对象的创建与使用分离,这样可以降低系统的耦合度,使用者不需要关注对象的创建细节.本篇学习的是抽象工厂模式.由于学习 ...

  5. 看图记设计模式【三】,创建模式系列:抽象工厂模式

    抽象工厂模式 意图 抽象工厂模式是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类. 一图说明: 还是老话,请在阅读本篇文章后,记住此图.抽象工厂模式也就记得大半了 图解: 抽象工 ...

  6. JAVA工厂模式优缺点_简单工厂模式、工厂模式和抽象工厂模式区别及优缺点

    各位小伙伴好,今天给大家主要介绍一下简单工厂模式.工厂模式和抽象工厂模式的区别及各自的优缺点. (本文实现语言为Python3) [前言] 众所周知今天所讲的内容是 设计模式的一类:对于设计模式这个概 ...

  7. 抽象工厂模式 java实例 tclhaier_Unity常用的设计模式_工厂模式系列之抽象工厂模式...

    在工厂方法模式中,工厂只负责生产具体的产品,每一个具体的工厂对应着一个具体的产品,工厂方法也具有唯一性,如果有时候我们需要一个工厂方法提供多个产品而不是一个单一的产品,例如:海尔品牌不止生产海尔TV, ...

  8. 《JAVA与模式》之抽象工厂模式

    场景问题 举个生活中常见的例子--组装电脑,我们在组装电脑的时候,通常需要选择一系列的配件,比如CPU.硬盘.内存.主板.电源.机箱等.为讨论使用简单点,只考虑选择CPU和主板的问题. 事实上,在选择 ...

  9. 抽象工厂模式_设计模式——抽象工厂模式

    阅读目录 使用频率:★★★★★ 一.什么是抽象工厂模式 二.补充说明 三.角色 四.例子 使用频率:★★★★★ 一.什么是抽象工厂模式 就是对一组具有相同主题的工厂进行封装(维基百科解释的很到位): ...

最新文章

  1. MySQL学习笔记 约束以及修改数据表
  2. 计算机网络通信技术课程的基本知识点内容,河北《计算机网络与通信(2339)》自学考试大纲...
  3. 前端后分离深入分析 ——浏览器渲染和服务器渲染区别
  4. oracle ogg常用指令,oracle goldengate日常管理命令
  5. 【LSB】图片隐写文档大纲
  6. 工作395-路由选择
  7. zookeeper一键启动关闭JAVA_HOME在PATH中找不到报错踩坑记
  8. dbUtils 原理
  9. 如何将电子海图的航线导到gps上_电子海图(ECDIS)使用总结
  10. Java 面试 1 小时,我看出了和月薪 3w 的差距
  11. [Ext JS 4] Grid 中的单元格添加Tooltip 的效果
  12. 点滴积累【JS】---JS小功能(JS实现多物体缓冲运动)
  13. python程序-调试Python程序代码的几种方法总结
  14. (算法)从10000个数中找出最大的10个
  15. java罗马数字_整数转罗马数字以及罗马数字转整数(java实现)
  16. 存储容量byte 流量单位byte
  17. Android 悬浮窗日志工具
  18. 塔防三国志服务器维护时间,塔防三国志中期玩家教程攻略详解
  19. PADS画2.54mm排针
  20. Spring3—AOP

热门文章

  1. 【Web】jsnbd
  2. 不入耳骨传导耳机品牌哪个好、骨传导耳机品牌推荐
  3. 微信小程序手机扫码上传图片报错500
  4. 计算机毕业设计-springboot课堂签到小程序-学生考勤打卡小程序
  5. 射频应用>>>Si44xx射频芯片>>>外部天线开关控制
  6. excel排名_【Excel一下-11】含相同数据的排序,如何实现“中国式”排名?
  7. python类处理可视化中国各省CO2排放数据,pyecharts绘制Timeline、Map、Pie、River、Treemap图
  8. “苹果税”要byebye,iOS最快下月开放第三方支付
  9. React脚手架的安装
  10. WebAR小程序开发