php设计模式之简单工厂模式
- ①抽象基类:类中定义抽象一些方法,用以在子类中实现
- ②继承自抽象基类的子类:实现基类中的抽象方法
- ③工厂类:用以实例化所有相对应的子类
- /**
- *
- * 定义个抽象的类,让子类去继承实现它
- *
- */
- abstract class Operation{
- //抽象方法不能包含函数体
- abstract public function getValue($num1,$num2);//强烈要求子类必须实现该功能函数
- }
- /**
- * 加法类
- */
- class OperationAdd extends Operation {
- public function getValue($num1,$num2){
- return $num1+$num2;
- }
- }
- /**
- * 减法类
- */
- class OperationSub extends Operation {
- public function getValue($num1,$num2){
- return $num1-$num2;
- }
- }
- /**
- * 乘法类
- */
- class OperationMul extends Operation {
- public function getValue($num1,$num2){
- return $num1*$num2;
- }
- }
- /**
- * 除法类
- */
- class OperationDiv extends Operation {
- public function getValue($num1,$num2){
- try {
- if ($num2==0){
- throw new Exception("除数不能为0");
- }else {
- return $num1/$num2;
- }
- }catch (Exception $e){
- echo "错误信息:".$e->getMessage();
- }
- }
- }
如果我们现在需要增加一个求余的类,会非常的简单
- /**
- * 求余类(remainder)
- *
- */
- class OperationRem extends Operation {
- public function getValue($num1,$num2){
- return $num1%$num12;
- }
- }
解决办法:使用一个单独的类来实现实例化的过程,这个类就是工厂
- /**
- * 工程类,主要用来创建对象
- * 功能:根据输入的运算符号,工厂就能实例化出合适的对象
- *
- */
- class Factory{
- public static function createObj($operate){
- switch ($operate){
- case '+':
- return new OperationAdd();
- break;
- case '-':
- return new OperationSub();
- break;
- case '*':
- return new OperationSub();
- break;
- case '/':
- return new OperationDiv();
- break;
- }
- }
- }
- $test=Factory::createObj('/');
- $result=$test->getValue(23,0);
- echo $result;
其他关于关于此模式的笔记:
以交通工具为例子:要求请既可以定制交通工具,又可以定制交通工具生产的过程
1>定制交通工具
1.定义一个接口,里面包含交工工具的方法(启动 运行 停止)
2.让飞机,汽车等类去实现他们
2> 定制工厂(通上类似)
1.定义一个接口,里面包含交工工具的制造方法(启动 运行 停止)
2.分别写制造飞机,汽车的工厂类去继承实现这个接口
php设计模式之简单工厂模式的更多相关文章
- C#设计模式(2)-简单工厂模式
引言 上一遍中介绍了设计模式中的单例模式-C#设计模式(1)-单例模式,本篇将介绍简单工厂模式,也是比较容易理解的一种模式: 简单工厂模式简介 什么是简单工厂模式? 定义一个工厂类,它可以根据参数的不 ...
- C#设计模式(2)——简单工厂模式(转)
C#设计模式(2)——简单工厂模式 一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理 ...
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...
- 设计模式之简单工厂模式(Simple Factory)
原文地址:http://www.cnblogs.com/BeyondAnyTime/archive/2012/07/06/2579100.html 今天呢,要学习的设计模式是“简单工厂模式”,这是一个 ...
- iOS设计模式 - (3)简单工厂模式
iOS设计模式 - (3)简单工厂模式 by Colin丶 转载请注明出处: http://blog.csdn.net/hitwhylz/article/ ...
- 设计模式之简单工厂模式Simple Factory(四创建型)
工厂模式简介. 工厂模式专门负责将大量有共同接口的类实例化 工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类. 工厂模式有三种形态: 1.简单工厂模式Simple Factory ...
- php实现设计模式之 简单工厂模式
作为对象的创建模式,用工厂方法代替new操作. 简单工厂模式是属于创建型模式,又叫做静态工厂方法模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 工厂 ...
- [python实现设计模式]-3.简单工厂模式-触宝开放平台
预备知识: 开放封闭原则(Open-Closed Principle OCP) Software entities(classes,modules,functions etc) should open ...
- C++实现设计模式之 — 简单工厂模式
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4251756.html 所谓简单工厂模式,是一种实例化对象的方式,只要输入需要实例化对象的名字 ...
- C#设计模式之简单工厂模式
简单工厂模式解释: 简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern) 是通过专门定义一 ...
随机推荐
- c++学习(1)
c++学习(1) 1.const C VS C++: 在c语言中const是一个只读变量(ReadOnly Varible),在c++中const只是代表常量(Constant). 例: const ...
- ScrollView自动滑到底部
// 自动滑动到底部 mScrollView.post(new Runnable() { @Override public void run() { mScrollView.fullScroll(Sc ...
- C++排序
浅谈C++之冒泡排序.希尔排序.快速排序.插入排序.堆排序.基数排序性能对比分析(好戏在后面,有图有真相) 最近一段时间去武汉参加了N多笔试,在几次试题中都出现了排序.偏偏出现了我没怎么看的插入排序, ...
- poj1009
题目大意:边缘检测 IONU卫星成像公司,公司记录和储存非常大的图片使用行程编码,你需要编写一个程序读取被压缩的图像,发现图像的边缘,描述如下,并且输出另一个发现的边缘压缩图像. 一个简单的边缘检测算 ...
- 414. Third Maximum Number
这个题有点坑啊..主要是自己蠢,以为 Integer.MIN_VALUE -1 == -2147483649 public class Solution { public int thirdMax(i ...
- continuous integration and continuous deployment in DW/BI
deployment methodIn Redshift1, Deploy process: Drop and Refresh the view, Drop table, Create an empt ...
- jeety and tomcat plugins In Maven
(转自)maven jetty 插件使用 本机环境 JDK 7 Maven 3.2 Jetty 9.2 Eclipse Luna pom.xml 配置 在你的 pom.xml 文件中添加 jetty ...
- XML转义特殊字符
正常来说,只有"<" 字符和"&"字符对于XML来说是严格禁止使用的. 需要注意的是: a. 转义序列各字符间不能有空格: b. 转义序列必须以& ...
- 爱加密Android APk 原理解析
转载请标明出处:http://blog.csdn.net/u011546655/article/details/45921025 爱加密Android APK加壳原理解析 一.什么是加壳? 加壳是在二 ...
- Android源代码分析之Framework的MediaPlayer
在Android中MediaPlayer用来播放音频和视频文件,在这里分析下在Framework层中MediaPlayer是怎样调用的.MediaPlayer的代码位于:./frameworks/ba ...