我的认为:所为工厂模式是事先有一系类class,一个工厂类'

工厂类根据不同的参数创建不同的对象,调用各自的方法;

php利用工厂模式实现计算器:

  1. ?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: modern
  5. * Date: 16-7-19
  6. * Time: 下午5:24
  7. * 简单工厂模式两数运算器
  8. */
  9.  
  10. echo "hello factory models<br/>";
  11. echo "begin<br/>";
  12.  
  13. if(isset($_GET['param1'])){
  14. $param1 = $_GET['param1'];
  15. }else{
  16. $param1 = 0;
  17. }
  18. if(isset($_GET['param2'])){
  19. $param2 = $_GET['param2'];
  20. }else{
  21. $param2 = 0;
  22. }
  23.  
  24. if(isset($_GET['param3'])){
  25. $param3 = $_GET['param3'];
  26. }else{
  27. $param3 = '';
  28. }
  29.  
  30. interface Init
  31. {
  32. public function getResult($a,$b);
  33. }
  34.  
  35. class OperateAdd implements Init
  36. {
  37. public function getResult($a,$b)
  38. {
  39. return $a + $b;
  40. }
  41. }
  42.  
  43. class OperateSub implements Init
  44. {
  45. public function getResult($a,$b)
  46. {
  47. return $a - $b;
  48. }
  49. }
  50.  
  51. class OperateMul implements Init
  52. {
  53. public function getResult($a,$b)
  54. {
  55. return $a * $b;
  56. }
  57. }
  58. class OperateDiv implements Init
  59. {
  60. public function getResult($a,$b)
  61. {
  62. try{
  63. if($b == 0){
  64. throw new Exception("除数不能为0");
  65. }else{
  66. return $a / $b;
  67. }
  68. }catch (\Exception $e){
  69. echo "运算发生错误:".$e->getMessage();
  70. }
  71. }
  72. }
  73.  
  74. class Calc
  75. {
  76. public static function operate($operate)
  77. {
  78. try{
  79. switch($operate)
  80. {
  81. case '+':
  82. return new OperateAdd();break;
  83. case '-':
  84. return new OperateSub();break;
  85. case '*':
  86. return new OperateMul();break;
  87. case '/':
  88. return new OperateDiv();break;
  89. default:
  90. throw new Exception("标识错误!");
  91. }
  92. }catch (\Exception $e){
  93. echo '运算错误:'.$e->getMessage();
  94. }
  95. }
  96. }
  97. $me = Calc::operate($param3);
  98. if(gettype($me) == 'object'){
  99. $result = $me->getResult($param1,$param2);
  100. echo $result;
  101. }

 

  1. 解说:本例中,定义接口类init,再定义加减乘除四个类分别实现这个接口类,这样每个运算方法都须事先方法getResult(),定义工厂类,工厂类里定义一个静态方法,用户根据不同参数创建各个方法对象.最后再调用getResult()实现运算.

php设计模式学习之工厂模式的更多相关文章

  1. Java设计模式学习之工厂模式

    在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了.Java 设计模式之工厂模式 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低 ...

  2. Java设计模式学习三-----工厂模式

    工厂模式 工厂模式(Factory Pattern)是Java中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,创建对象时不会对客户端暴露创建逻 ...

  3. (@WhiteTaken)设计模式学习——抽象工厂模式

    抽象工厂模式,可以向客户端提供一个接口,而客户端不用指定具体的类型创建对象,却能够创建多个产品族(一类具有共性产品,如地域等)的对象. 下面直接上代码. 1.苹果需要实现水果的接口,而苹果可以有北方的 ...

  4. Java-马士兵设计模式学习笔记-工厂模式-抽象工厂模式

    一.概述 1.抽象工厂:当情况是需要产生一系列产品,若需更换产品,则要求一系列产品一起换,且要控制一系列产品的产生过程,此时可考虑抽象工厂模式.例:小明装修屋子,把电视.冰箱都替换掉,他这次需要把电视 ...

  5. 设计模式学习——抽象工厂模式(Abstract Factory Pattern)

    现有一批装备(产品),分为不同的部位(上装.下装)与不同的等级(lv1.lv2).又有不同lv的工厂,只生产对应lv的全套装备. 代码实现上...本次写得比较偷懒,函数实现都写在头文件了.... 有些 ...

  6. Java-马士兵设计模式学习笔记-工厂模式-简单工厂

    一.概述 1.目标:要控制任意类型交通工具的生产模式 2.目标有两层意思(1)任意类型 (2)生产模式,所以对应的,要这两个层面上抽象(Movable,VehicleFactory),利用接口,实现多 ...

  7. Java-马士兵设计模式学习笔记-工厂模式-用Jdom模拟Spring

    一.概述 1.目标:模拟Spring的Ioc 2.用到的知识点:利用jdom的xpath读取xml文件,反射 二.有如下文件: 1.applicationContext.xml <?xml ve ...

  8. Java-马士兵设计模式学习笔记-工厂模式-模拟Spring读取Properties文件

    一.目标:读取properties文件,获得类名来生成对象 二.类 1.Movable.java public interface Movable { void run(); } 2.Car.java ...

  9. Java-马士兵设计模式学习笔记-工厂模式-单例及多例

    一.单例的作用是用于控制类的生成方式,而不让外部类任意new对象 1.Car.java import java.util.ArrayList; import java.util.List; publi ...

随机推荐

  1. 使用libcurl进行HTTP GET操作

    Working example how to do a GET request with libcurl and save it to a string variable for future use ...

  2. 英语发音规则---s发/s/的读音规则

    英语发音规则---s发/s/的读音规则 一.总结 一句话总结:字母s的读音有/s/./z/./ʃ/./{/这几种,下面主要讲讲发/s/音的几条规则. 字母s的读音有/s/./z/./ʃ/./{/这几种 ...

  3. html5--5-16 综合实例绘制饼图

    html5--5-16 综合实例绘制饼图 实例 <!doctype html> <html> <head> <meta charset="utf-8 ...

  4. python cassandra 创建space table并写入和查询数据

    from cassandra.cluster import Cluster cluster = Cluster(["10.178.209.161"]) session = clus ...

  5. Mongodb 官网驱动2.2.4.26版本 增,删 改,查,mongodb2.2.4.26

    Mongodb是3.2.7版本 最近在学习mongodb数据库在网上找到的都不是2.X版本以下的,因为驱动从2.X以后修改了很多,以前不支持linq现2.X也支持了, Mongodb 启动服务就不说了 ...

  6. Exception in thread “main” java.sql.SQLException: The server time zone value ‘�й���׼ʱ��’ is unrecognized or represents more than one time zone.

    Exception in thread “main” java.sql.SQLException: The server time zone value ‘�й���׼ʱ��’ is unrecogn ...

  7. c++ zlib(qt)压缩与解压缩

    #include <QtCore/QCoreApplication> #include "zlib.h" #include "stdio.h" #i ...

  8. C/C++获取Windows系统CPU和内存及硬盘使用情况

    //1.获取Windows系统内存使用率 //windows 内存 使用率 DWORD getWin_MemUsage(){ MEMORYSTATUS ms; ::GlobalMemoryStatus ...

  9. CSS3:CSS 参考手册

    ylbtech-CSS:CSS 参考手册 1.返回顶部 1. W3School 的 CSS 参考手册定期通过所有主流浏览器进行测试. CSS 属性 CSS 属性组: 动画 背景 边框和轮廓 盒(框) ...

  10. Coding 两步认证技术介绍

    什么是两步认证 在介绍两步认证之前,首先来看下目前主流的几种认证方式. 上图中的认证方式大体上可以分为三大类 1.You know : 比如密码,这种只有我们知道的 2.You are : 比如指纹, ...