php 工厂方法模式

来源:互联网 发布:哥伦比亚冲锋衣 知乎 编辑:程序博客网 时间:2024/05/16 09:52
<?php    /**     * 工厂方法模式,定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。     *      * 包含的对象     * 1,抽象产品     * 2,具体产品     * 3,抽象工厂     * 4,具体工厂     *     * 将简单工厂模式的工厂类进行抽象化,避免扩展时需要修改简单工厂模式中的工厂类。方便扩展、维护。     **/    /**     * 运算类     **/    abstract class Operation    {        abstract public function getValue($num1,$num2);    }    /**     * 加法类     **/    class OperationPlus 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();            }        }    }    /**     * 抽象工厂类     **/    abstract class Factory    {        public abstract function getOperation();    }    /**     * 加法工厂     **/    class FactoryPlus extends Factory    {        public function getOperation() {            return new OperationPlus();        }    }    /**     * 加法工厂     **/    class FactorySub extends Factory    {        public function getOperation() {            return new OperationSub();        }    }    /**     * 加法工厂     **/    class FactoryMul extends Factory    {        public function getOperation() {            return new OperationMul();        }    }    /**     * 加法工厂     **/    class FactoryDiv extends Factory    {        public function getOperation() {            return new OperationDiv();        }    }    // 加法    $factory = new FactoryPlus();    $operation = $factory->getOperation();    echo $operation->getValue(10,11);    // 减法    $factory = new FactorySub();    $operation = $factory->getOperation();    echo $operation->getValue(10,11);    // 除法    $factory = new FactoryDiv();    $operation = $factory->getOperation();    echo $operation->getValue(10,2);?>

0 0
原创粉丝点击