• 技术文章 >后端开发 >php教程

    PHP设计模式:php工厂模式的介绍(附代码)

    不言不言2018-08-04 14:24:35原创633

    本篇文章给大家带来的内容是关于PHP设计模式:php工厂模式的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    工厂模式是一种隐藏类的实例化细节,并且对一系列类使用相同的实例化方式,可以很方便的扩展更多的实现同一个接口的类的创建对象的方式。
    示例应用场景有:
    1)在线支付
    支付有多种方式,比如微信支付,支付宝支付,银联支付等,根据用户的选择而采用相应的支付方式;
    2)访问量统计
    在一个业务较复杂的项目中,用户对不同的对象进行访问,比如访问文章、访问作者、访问文章目录等,同样是访问记录,记录的信息却不一样

    工厂模式的原理:
    先根据多个对象的相同行为设计一个接口,再让这几个类去实现这个接口,接着制造一个实例化工厂,即可在工厂中根据不同参数实例化不同类。

    工厂模式的具体实现:

    /*
     *  形状接口
     */interface Shape{
        public function area();}/*
     * 长方形类,实现了形状接口
     */class Rectangle implements Shape{
        private $long;    private $width;    function __construct($long,$width)
        {
            $this->long = $long;        $this->width = $width;
        }    /*
         * 实现面积方法
         */
        public function area()
        {
            // TODO: Implement area() method.
            return $this->long * $this->width;
        }
    }/*
     * 正方形类,实现了形状接口
     */class Square implements Shape{
        private $width;    function __construct($width)
        {
            $this->width = $width;
        }    /*
         * 实现面积方法
         */
        public function area()
        {
            // TODO: Implement area() method.
            return pow($this->width,2);
        }
    }/*
     * 圆形类,实现了形状接口
     */class Circle implements Shape{
        private $radiu;    function __construct($radiu)
        {
            $this->radiu = $radiu;
        }    /*
         * 实现面积方法
         */
        public function area()
        {
            // TODO: Implement area() method.
            return pi()*pow($this->radiu,2);
        }
    }class ShapeFactory{
        /*
         * 获取实例化的形状对象
         * ...$args 表示接受不限个数的参数
         */
        public function getShpae(...$args)
        {
            /*
             * 第一个参数为形状名,后面的参数为形状的尺寸
             */
            switch($args[0])
            {            case 'Rectangle':                return new Rectangle($args[1],$args[2]);            break;            case 'Square':                return new Square($args[1]);            break;            case 'Circle':                return new Circle($args[1]);            break;
            }        return null;
        }
    }$factory = new ShapeFactory();$shape = $factory->getShpae('Rectangle',2,3);$area[] = $shape->area();$shape = $factory->getShpae('Square',2);$area[] = $shape->area();$shape = $factory->getShpae('Circle',2);$area[] = $shape->area();
    print_r($area);/*
    Array
    (
        [0] => 6
        [1] => 4
        [2] => 12.566370614359
    )
    */

    相关文章推荐:

    php如何获取文件一级目录(纯代码)

    php如何利用经度和纬度来计算两点之间的距离(纯代码)

    以上就是PHP设计模式:php工厂模式的介绍(附代码)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:PHP设计模式
    上一篇:php如何获取文件一级目录(纯代码) 下一篇:如何用PHP将txt文件内容转换成数组并按行数获取指定内容(示例)
    大前端线上培训班

    相关文章推荐

    • PHP中的命名空间定义与使用(实例详解)• PHP中clone关键字和__clone()方法的使用(实例详解)• 带你分清类中的构造函数与析构函数• 五分钟带你了解PHP中的魔术方法(实例详解)• 怎样去搞定PHP类的继承?(总结分享)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网