工厂模式

本文详细介绍了抽象类和接口的概念,通过示例解释了抽象类如何帮助减少代码重复,并展示了如何利用工厂模式来实例化不同的类,从而提高代码的可维护性和灵活性。
  • ①抽象基类:类中定义抽象一些方法,用以在子类中实现

  • ②继承自抽象基类的子类:实现基类中的抽象方法

  • ③工厂类:用以实例化所有相对应的子类

 

141132_op7X_2409514.png


接口类:interface

 接口类就是一个类的领导者,指明方向,子类必须完成它指定方法

那么 我先来了解抽象类: 

abstract

其实抽象类和接口类有一部分很像,记得在哪里看见这样一句话,抽象类就把类像的部分抽出来,这句看上去很搞笑,其实它说出了抽象类的真理,抽象类的 作用是,当你发现你的很多类里面用很多方法你不断的在重复写,那你就可以考虑使用抽象类了,你可能会说“我不是可以重写一个类每个公共类我个实例化一个这 个公共类,调用相同的方法就可以了”,这里是可以,实际上抽象类做的工作也就是这个,不过他省去了你实例化的这个步骤,让你就像直接调用本类方法一样方 便,而且你还可以重载这个方法。


 抽象类就是一个类的服务提供商,拥有众多服务,你不用必须用,当需要的时候你来用就可以,如果你觉得不提供服务不满意,你还可以自己来做。而abstract function 方法和interface有些相似,就是父类中生声明的方法,子类中必须实现,但是没有用abstract声明的方法将成为子类的公共方法,没有必要在子类中必须实现


接下来看 例子:

/**

     * 

     * 定义个抽象的类,让子类去继承实现它

     *

     */

     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();

             }

         }

     }

现在还有一个问题未解决,就是如何让程序根据用户输入的操作符实例化相应的对象呢?
解决办法:使用一个单独的类来实现实例化的过程,这个类就是工厂


/**

     * 工程类,主要用来创建对象

     * 功能:根据输入的运算符号,工厂就能实例化出合适的对象

     *

     */

    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;

总结:

其实在我理解 工厂模式就是将公共部分抽离出来,但是为了后面的维护成本,就用到了工厂模式,等后面想改的时候,只需要改改一小部分即可,不需要每个方法都去重写一遍。

转载于:https://my.oschina.net/bo081220/blog/649747

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值