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

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

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

?php
/**
* Created by PhpStorm.
* User: modern
* Date: 16-7-19
* Time: 下午5:24
* 简单工厂模式两数运算器
*/ echo "hello factory models<br/>";
echo "begin<br/>"; if(isset($_GET['param1'])){
$param1 = $_GET['param1'];
}else{
$param1 = 0;
}
if(isset($_GET['param2'])){
$param2 = $_GET['param2'];
}else{
$param2 = 0;
} if(isset($_GET['param3'])){
$param3 = $_GET['param3'];
}else{
$param3 = '';
} interface Init
{
public function getResult($a,$b);
} class OperateAdd implements Init
{
public function getResult($a,$b)
{
return $a + $b;
}
} class OperateSub implements Init
{
public function getResult($a,$b)
{
return $a - $b;
}
} class OperateMul implements Init
{
public function getResult($a,$b)
{
return $a * $b;
}
}
class OperateDiv implements Init
{
public function getResult($a,$b)
{
try{
if($b == 0){
throw new Exception("除数不能为0");
}else{
return $a / $b;
}
}catch (\Exception $e){
echo "运算发生错误:".$e->getMessage();
}
}
} class Calc
{
public static function operate($operate)
{
try{
switch($operate)
{
case '+':
return new OperateAdd();break;
case '-':
return new OperateSub();break;
case '*':
return new OperateMul();break;
case '/':
return new OperateDiv();break;
default:
throw new Exception("标识错误!");
}
}catch (\Exception $e){
echo '运算错误:'.$e->getMessage();
}
}
}
$me = Calc::operate($param3);
if(gettype($me) == 'object'){
$result = $me->getResult($param1,$param2);
echo $result;
}

 

解说:本例中,定义接口类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. sipp 对asterisk 进行压力测试

    测试环境 asterisk  192.168.106.170 版本astrisk1.8 sipp   192.168.106.141 sipp版本3.3 安装依赖包yum install make g ...

  2. [AH2017/HNOI2017]抛硬币

    传送门 这个题的暴力比较好想--然后用一些组合的知识就可以变成正解了. 首先我们考虑a=b的情况.我们把扔出来的硬币看成是一个01序列,那么对于一个b获胜的序列,他在每一位都按位异或1之后必然是一个a ...

  3. Mysql数据库的打开和关闭

    Mysql数据库的打开和关闭: 选择计算机(win7)-右键管理 在新窗口选择--服务 5 找到mysql,然后右键-启动(停止)

  4. sublimelinter-php 错误代码提示

    先安装 SublimeLinter 如同其他插件一样使用 Package Control 来安装. 按下 Ctrl+Shift+p 进入 Command Palette 输入install进入 Pac ...

  5. 关于使用quartz动态增删改定时任务

    1. 首先, 还是喜闻乐见的导包 <dependency> <groupId>org.springframework.boot</groupId> <arti ...

  6. [小记]Windows下配置环境变量和需不需要重启问题

    经常看到一些软件的安装说明上写着,修改Windows的环境变量,然后重新启动计算机.这让人不禁产生疑问,修改环境变量之后真的要重启吗? 其实只要理解了环境变量的原理就可以做出正确的判断.环境变量是一些 ...

  7. codevs-1203

    1203 判断浮点数是否相等 题目描述 Description 给出两个浮点数,请你判断这两个浮点数是否相等   输入描述 Input Description 输入仅一行,包含两个浮点数   输出描述 ...

  8. 第三篇:SpringBoot用JdbcTemplates访问Mysql

    本文介绍springboot通过jdbc访问关系型mysql,通过spring的JdbcTemplate去访问. 准备工作 jdk 1.8 maven 3.0 idea mysql 初始化mysql: ...

  9. python 内置函数的补充 isinstance,issubclass, hasattr ,getattr, setattr, delattr,str,del 用法,以及元类

    isinstance   是 python中的内置函数 , isinstance()用来判断一个函数是不是一个类型 issubclass  是python 中的内置函数,  用来一个类A是不是另外一个 ...

  10. 《剑指offer》面试题1:为类CMyString添加赋值运算符函数——C++拷贝构造函数与赋值函数

    题中已给出CMyString的类定义,要求写赋值运算符函数. #include<iostream> #include<cstring> using namespace std; ...