概述
简单工厂模式示意图:
简单工厂模式优点:
代码具有一定的拓展性
遵循了单一职责原则
属于面向接口编程
简单工厂模式提供了一个对外的类 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’: }判断,这无疑是十分灾难的,因为写好的代码我们最好不要再去碰它,因为很可能造成未知的原因,你说是不?
最后
以上就是留胡子水蜜桃为你收集整理的设计模式之 : 简单工厂模式的全部内容,希望文章能够帮你解决设计模式之 : 简单工厂模式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复