简介: 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

优缺点:
优点:工厂处理好逻辑后,外部可直接调用,不用一一调用各自的逻辑类,优化代码结构
缺点:违反高内聚责任分配原则

实现条件:
1.工厂条件:处理逻辑
2.产品角色:interface 或者 abstract 产品父类,描述所有产品接口
3.产品具体角色:实现 interface 或者继承 abstract 的具体产品类,具体产品类;

代码(代码仿照白俊瑶博客写的,完全为了加深印象):
1.普通的例子
Bad.php

<?phpnamespace factory;class Bad{public function getResult($numA,$operation,$numB){switch($operation){case '+':$result = $numA+$numB;break;case '-':$result = $numA-$numB;break;case '/':if($numB !=0){$result = $numA/$numB;}else{throw new \InvalidArgumentException('除数不能为0');}break;case '*':$result = $numA*$numB;break;default:throw new \InvalidArgumentException('除数不能为0');}return $result;}

index.php

<?php
require __DIR__.'/../Loader.php';spl_autoload_register('Loader::autoload');//注册自动加载$program = new \factory\Bad();$result = $program->getResult(1,'+',2);echo $result;

2.把各个运算单独封装类
Operation.php

<?phpnamespace factory;abstract class Operation{protected $numA=0;protected $numB=0;abstract public function getResult();public function setNumberA($number){$this->numA = $number;}public function setNumberB($number){$this->numB = $number;}}

Sub.php减法类

<?phpnamespace factory;abstract class Operation{protected $numA=0;protected $numB=0;abstract public function getResult();public function setNumberA($number){$this->numA = $number;}public function setNumberB($number){$this->numB = $number;}}

index.php

<?php
require __DIR__.'/../Loader.php';spl_autoload_register('Loader::autoload');//注册自动加载$program = new \factory\Sub();
$program->setNumberA(5);
$program->setNumberB(2);$result = $program->getResult();echo $result;

3.简单工厂模式
Factory.php

<?phpnamespace factory;class Factory
{public function create($operation){switch($operation){case '+':return new Add();break;case '-':return new Div();break;case '*':return new Mul();break;case '/':return new Div();break;default:throw new \InvalidArgumentException('不支持的运算');break;}}}

index.php

<?php
require __DIR__.'/../Loader.php';spl_autoload_register('Loader::autoload');//注册自动加载$program = new \factory\Factory();
$operation =  $program->create('+');
$operation->setNumberA(5);
$operation->setNumberB(3);
$result = $operation->getResult();
echo $result;

PHP设计模式-简单工厂方法相关推荐

  1. 设计模式--静态工厂、简单工厂方法案例分析

    简介 1.学习本篇文章,了解简单工厂设计模式的使用场景. 2.如何使用简单工厂模式. 3.简单工厂模式能解决什么问题? 场景 现在有一家外卖小店需要从生产一份外卖开始进行考虑设计,当客户在网上点出不同 ...

  2. Android工厂设计模式(简单工厂,工厂方法,抽象工厂,BitmapFactory简单工厂分析,Retrofit抽象工厂分析)

    文章目录 创建型设计模式(简单工厂,工厂方法,抽象工厂) 一.简单工厂模式 引出简单工厂模式 二.工厂方法模式 三.抽象工厂模式 Android源码中用到的工厂模式举例 一.BitmapFactory ...

  3. 最简单java设计模式:工厂方法模式

    前言 在前一篇文章讲解了一下简单工厂模式,在上篇文章中,我们也讲到了简单工厂模式的缺点,就是不满足开闭原则,这对于软件的设计来说,是不太好的,而下面讲解的工厂方法模式,正是为了弥补简单工厂模式的缺点, ...

  4. JavaScript设计模式--简单工厂模式例子---XHR工厂

    JavaScript设计模式--简单工厂模式例子---XHR工厂 第一步,Ajax操作接口(目的是起一个接口检测作用) (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //静态方 ...

  5. 三角形圆形创建与擦除java_设计模式---------------简单工厂模式

    设计模式---------------简单工厂模式 一.题目(Question) 使用简单工厂模式设计一个可以创建不同几何形状(如圆形.方形和三角形等)的绘图工具,每个几何图形都要有绘制draw()和 ...

  6. python类是实例的工厂_Python设计模式之工厂方法模式实例详解

    本文实例讲述了Python设计模式之工厂方法模式.分享给大家供大家参考,具体如下: 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类, ...

  7. 设计模式复习-工厂方法模式

     设计模式复习-工厂方法模式 相对于简单工厂,工厂方法是把算法类的实例化延迟到了调用者那去做,调用者根据自己的需要,自己实例化相关的工厂并且生产相关算法.这么做是因为简单工厂是不满足OCP的,因为如果 ...

  8. C#设计模式(3)——工厂方法模式

    一.引言 在简单工厂模式中讲到简单工厂模式的缺点,有一点是--简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过于复杂,然而本专题介绍的工厂方法模式可以 ...

  9. C++设计模式之工厂方法模式

    问题描述 之前讲到了C++设计模式--简单工厂模式,由于简单工厂模式的局限性,比如:工厂现在能生产ProductA.ProductB和ProductC三种产品了,此时,需要增加生产ProductD产品 ...

最新文章

  1. 人脸识别成创业热门,统计企业超1万家,刷脸支付项目将迎来热潮
  2. SpringBoot 自带工具类~StreamUtils
  3. 知乎万赞:人并不是活一辈子,而是活几个瞬间
  4. js点击复制文本 - 案例篇
  5. python实现dos攻击_dos攻击原理及攻击实例
  6. 【MAC】Mac下配置perl的DBD::MySQL模块
  7. ASP.NET 与 MVC 模式
  8. ffmpeg函数介绍
  9. 【软件】一个简单好用的取色器TakeColor(百度云免费下载链接)
  10. 计算机毕业设计——基于Spring Boot框架的网络游戏虚拟交易平台的设计与实现
  11. 最长公共子序列(LCS) 最长公共子串
  12. CV520直接pin对pin替换 MS520,直接替换,无需修改硬件以及软件
  13. android 静默安装实现,Android 中静默安装实现详解
  14. 字符串ucfirst解析
  15. 商城项目实战32:商品详情页实现
  16. 假如生产环境出现CPU占用过高,如何分析思路和定位?
  17. 自己写的grpc简单连接池,基于common pool2
  18. [1057]VMware安装的虚拟机窗口如何自适应屏幕大小
  19. CSS 层叠样式表(2)
  20. Python 学习7-魔方方法

热门文章

  1. mysql数据库合库数据库合并心得
  2. 基于人脸识别的考勤记录项目
  3. 简单工厂模式(C语言实现)
  4. 什么是e人,MBTI中的E型人格是怎么样的
  5. Ural_1671. Anansi's Cobweb(并查集)
  6. win7设置桌面豆绿色
  7. win7安装网络打印机显示windows无法连接到打印机,出现错误0x00000bcb
  8. 使用Fiddler对手机App抓包
  9. SQL中的COALESCE()函数
  10. excel 分组排序,取前5