php设计模式学习之工厂模式
我的认为:所为工厂模式是事先有一系类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设计模式学习之工厂模式的更多相关文章
- Java设计模式学习之工厂模式
在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了.Java 设计模式之工厂模式 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低 ...
- Java设计模式学习三-----工厂模式
工厂模式 工厂模式(Factory Pattern)是Java中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,创建对象时不会对客户端暴露创建逻 ...
- (@WhiteTaken)设计模式学习——抽象工厂模式
抽象工厂模式,可以向客户端提供一个接口,而客户端不用指定具体的类型创建对象,却能够创建多个产品族(一类具有共性产品,如地域等)的对象. 下面直接上代码. 1.苹果需要实现水果的接口,而苹果可以有北方的 ...
- Java-马士兵设计模式学习笔记-工厂模式-抽象工厂模式
一.概述 1.抽象工厂:当情况是需要产生一系列产品,若需更换产品,则要求一系列产品一起换,且要控制一系列产品的产生过程,此时可考虑抽象工厂模式.例:小明装修屋子,把电视.冰箱都替换掉,他这次需要把电视 ...
- 设计模式学习——抽象工厂模式(Abstract Factory Pattern)
现有一批装备(产品),分为不同的部位(上装.下装)与不同的等级(lv1.lv2).又有不同lv的工厂,只生产对应lv的全套装备. 代码实现上...本次写得比较偷懒,函数实现都写在头文件了.... 有些 ...
- Java-马士兵设计模式学习笔记-工厂模式-简单工厂
一.概述 1.目标:要控制任意类型交通工具的生产模式 2.目标有两层意思(1)任意类型 (2)生产模式,所以对应的,要这两个层面上抽象(Movable,VehicleFactory),利用接口,实现多 ...
- Java-马士兵设计模式学习笔记-工厂模式-用Jdom模拟Spring
一.概述 1.目标:模拟Spring的Ioc 2.用到的知识点:利用jdom的xpath读取xml文件,反射 二.有如下文件: 1.applicationContext.xml <?xml ve ...
- Java-马士兵设计模式学习笔记-工厂模式-模拟Spring读取Properties文件
一.目标:读取properties文件,获得类名来生成对象 二.类 1.Movable.java public interface Movable { void run(); } 2.Car.java ...
- Java-马士兵设计模式学习笔记-工厂模式-单例及多例
一.单例的作用是用于控制类的生成方式,而不让外部类任意new对象 1.Car.java import java.util.ArrayList; import java.util.List; publi ...
随机推荐
- html5--4-3 source元素-解决浏览器的兼容
html5--4-3 source元素-解决浏览器的兼容 学习要点 掌握source元素的用法 source元素-解决浏览器额兼容 HTML5 中新增的元素 video和audio元素的子元素,可指定 ...
- 在Angular.js中的H5页面调用Web api时跨域问题处理
/// <summary> /// 被请求时 /// 在Angular.js中的H5页面调用Web api时跨域问题处理 /// </summary> /// <para ...
- 【EOJ Monthly 2018.2 (Good bye 2017)】
23333333333333333 由于情人节要回家,所以就先只放代码了. 此题是与我胖虎过不去. [E. 出老千的 xjj] #include<cstdio> #include<c ...
- [APIO 2017] 商旅
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=5367 [算法] 很明显的分数规划问题 预处理从一个点走到另一个点所获最大利润和最短路 ...
- the generation has been cancelled because errors have been found by the check model
生成物理模型出现这个错误的话,那就打开“生成物理模型”(快捷键 ctrl+shift+p) 然后找到 Detail → Option 接着讲Check mode复选框去掉.
- ++i和i++的效率孰优孰劣
在内建数据类型的情况下,效率没有区别: 在自定义数据类型的情况下,++i效率更高! 分析: (自定义数据类型的情况下) ++i返回对象的引用: i++总是要创建一个临时对象,在退出函数时还要销毁它,而 ...
- Java编程环境IntelliJ IDEA
1. 下载并安装jdk,进行配置 https://www.cnblogs.com/zhangchao0515/p/6806408.html 2. 下载并安装 IntelliJ IDEA, 并进行破解 ...
- A - Mike and Cellphone
While swimming at the beach, Mike has accidentally dropped his cellphone into the water. There was n ...
- swift日期操作
简介:本文将介绍一些关于swift中对于日期的格式化与获取,支持swift4.0 extension Date { //格式化日期 func getDateString() -> String{ ...
- mysql order by是怎么工作的?
假设我们要查询一个市民表中城市=杭州的所有人的名字,并且按照名字排序 CREATE TABLE `t` ( `id` ) NOT NULL, `city` ) NOT NULL, `name` ) N ...