设计模式之 : 简单工厂模式
来源:互联网 发布:软件开发测试基础知识 编辑:程序博客网 时间:2024/06/10 06:37
简单工厂模式示意图:
简单工厂模式优点:
代码具有一定的拓展性遵循了单一职责原则属于面向接口编程简单工厂模式提供了一个对外的类 Client和实际工作的类,外界只需要传递特定的参数就可以调用不同的实际功能类,而不需要直接面对实际类与函数,拓展性大大增强。
代码实例:
简单工厂模式的初步实现
<?php /** * 抽象基类 * 操作类 * 因为包含有抽象方法,所以类必须声明为抽象类(抽象类和接口类均可) */ abstract class Operation{ //抽象方法不能包含函数体 abstract public function getValue($num1,$num2);//强烈要求子类必须实现该功能函数 } //子类,可以写在不同文件中,switch后引入文件创建类 /** * 加法类 */ 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(); } } } ?>//工厂类<?php /** * 工程类,主要用来创建对象 * 功能:根据输入的运算符号,工厂就能实例化出合适的对象 * */ 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;?>
简单工厂模式不足:
虽然它遵循了单一职责原则,但它违反了另一条同样很重要的原则:开放封闭原则。如果新增一个算法,那么我们还要修改 Factory类,增加一个switch ($type) {case’condition’: }判断,这无疑是十分灾难的,因为写好的代码我们最好不要再去碰它,因为很可能造成未知的原因,你说是不?
1 0
- 设计模式 之简单工厂+ 工厂模式
- 设计模式之简单工厂设计模式
- 设计模式之简单工厂模式,工厂模式,策略模式
- 设计模式 之 简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂.
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 迷宫问题BFS
- php函数--array_key_exists()
- 理解SaaS、PaaS、LaaS以及之间的区别
- SIMT ( Single Instruction Multiple Threads)
- iOS 中图片压缩和图片上传
- 设计模式之 : 简单工厂模式
- RIFF和WAVE音频文件格式
- 解决: Fault tolerant heap shim applied to current process
- 建站这件小事(四)【建立FTP服务器】
- Android Studio报错 :com.android.dex.DexException: Multiple dex files define
- 一道关于飞机加油的问题
- nova api执行过程(以nova list为例)
- Android studio Android Monitor
- HTML常用标签