博主信息
博文 6
粉丝 3
评论 1
访问量 10151
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
简单工厂模式
齐天大圣的博客
原创
1918人浏览过

需求:完成一个计算器,计算2个数的加减乘除等操作

class Cal
{
    public function countVal ($num1, $num2, $type)
    {
        switch ($type) {
            case '+' :
                // 验证……
                $count = $num1 + $num2;
                break;
            case '-' :
                // 验证……
                $count = $num1 - $num2;
                break;
             // …… 若有其他计算累计,继续加case判断。
        }
    }
}

 以上代码会有些问题,若验证的代码很长,或计算类型很多,那countVal方法就会变得非常长,将难以阅读及维护。

改进如下:

interface IMath
{
    function count($num1, $num2);
}
class Add implements IMath
{
    public function count($num1, $num2)
    {
        return $num1 + $num2;
    }
}
class Sub implements IMath
{
    public function count($num1, $num2)
    {
        return $num1 - $num2;
    }
}
class Cal
{
    // 这里就叫简单工厂模式
    public static function getMath ($type)
    {
        switch ($type) {
            case '+' :
                return new Add();
                break;
            case '-':
                return new Sub();
                break;
             // ……
        }
    }
}
$math = Cal::getMath('+');
echo $math->count(10,

 

以上代码比之前的改进在与,在getMath方法里,只负责new出相应的计算类,不需要管具体的验证等操作,而且写好的计算类今后是不需要改动的

 

不过,这种简单工厂模式只适合计算类型很少的情形。 如果计算类型很多,比如取模、平方根、正弦、余弦等。 那他就不符合了。

首先他违背了开闭原则,新增了一个计算类型,Cal类就需要修改。其次,getMath方法将很长,难以阅读。

如何解决,使用工厂模式。


本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学