我的认为:所为工厂模式是事先有一系类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. PHP执行外部命令【转】

    PHP是完全支持外部命令的,但是出于安全考虑,一般很少使用. PHP提供共了3种方法调用外部命令: (1)调用执行外部命令函数(system(),exec(),passthru(),shell_exe ...

  2. html5--select与HTML5新增的datalist元素

    html5--select与HTML5新增的datalist元素 学习要点 掌握select元素与datalist元素的使用 select元素 用来建立一个下拉菜单选项列表 不仅可以在表单中使用,还可 ...

  3. gitblit安装使用

    1.下载地址 http://www.gitblit.com/ 2.安装jdk(自行安装) 3.解压gitblit # tar -zxvf gitblit-1.8.0.tar.gz 4.配置# cd g ...

  4. Django中使用静态资源/文件

    Django中常需要引用js,css,小图像文件,一般我们把这一类文件称为静态文件,放置在static文件夹中,接下来,对Django中配置静态文件进行下傻瓜式的步骤介绍 在工程目录下新建static ...

  5. codevs 3324 新斯诺克

    3324 新斯诺克  时间限制: 1 s  空间限制: 64000 KB  题目等级 : 白银 Silver   题目描述 Description 斯诺克又称英式台球,是一种流行的台球运动.在球桌上, ...

  6. css样式 -- 表格不会因为字体过长导致字体溢出的问题

    常常碰到因为表格大小就麽大了,字体过长会爆炸溢出的问题,我们后端就用这个可以了,溢出的可以省略号 ... 代替好了. /* 在表格css样式加上这三个就可以了 效果就会变成 “abc...” */ { ...

  7. Oracle中CASE WHEN的用法实例

    实例演示: (1)查询表users中的数据. select u.id,u.realname,U.SEX from users u; 查询结果如下 ID    REALNAME SEX 1  10082 ...

  8. counting the numbers

    题意: 给定$a,b,c$ ,求解满足 $1 \leq m \leq b, 1 \leq n \leq c, a | mn$ 的 $(m,n)$ 数对个数. $a \leq INTMAX$, $b \ ...

  9. junit4 Assert静态方法及API

    junit中的assert方法全部放在Assert类中. 1.assertTrue/False([String message,]boolean condition);    用来查看变量是是否为fa ...

  10. java集合框架之Collection

    参考http://how2j.cn/k/collection/collection-collection/366.html Collection是 Set List Queue和 Deque的接口Qu ...