php 工厂模式


承接上篇php模式设计之 单例模式,(虽然好像关系不大)。今天讲述第二种基础的模式设计——工厂模式。

那么何为工厂模式?

从名字来看,似乎看不出什么端倪。工厂模式,和生产有关?还是和生产流程有关?难道还和工厂领导有关?和领导秘书有关?秘书...     好了不卖关子了,所谓工厂模式还真和生产有关。生产什么呢?生产出来的是一个实例对象。通过什么设备生产?通过一个工厂类生产。怎么生产呢?工厂类调用自身静态方法来生产对象实例

工厂模式有一个关键的构造,根据一般原则命名为Factory的静态方法,然而这只是一种原则,虽然工厂方法可以任意命名这个静态还可以接受任意数据的参数,必须返回一个对象。

为什么要用工厂模式?

  很多没接触过工厂模式的人会不禁问,为啥我要费那么大的劲儿去构造工厂类去创建对象呢?不去套用那些易维护,可扩展之类的话,我们可以考虑这样一个简单的问题。如果项目中,我们通过一个类创建对象。在快完成或者已经完成,要扩展功能的时候,发现原来的类类名不是很合适或者发现类需要添加构造函数参数才能实现功能扩展。我靠!我都通过这个类创建了一大堆对象实例了啊,难道我还要一个一个去改不成?我们现在才感受到了“高内聚低耦合”的博大精深。没问题,工厂方法可以解决这个问题。

  再考虑一下,我要连接数据库,在php里面就有好几种方法,mysql扩展,mysqli扩展,PDO扩展。我就是想要一个对象用来以后的操作,具体要哪个,视情况而定喽。既然你们都是连接数据库的操作,你们就应该拥有相同的功能,建立连接,查询,断开连接...(此处显示接口的重要性)。总而言之,这几种方法应该“团结一致,一致对外”。如何实现呢?利用工厂模式。

工厂模式如何实现?

  相对于单例模式,上面我们提供了足够的信息,工厂类,工厂类里面的静态方法。静态方法里面new一下需要创建的对象实例就搞定了。当然至于考虑上面的第二个问题,根据工厂类静态方法的参数,我们简单做个判断就好了。管你用if..else..还是switch..case..,能快速高效完成判断该创建哪个类的工作就好了。最后,一定要记得,工厂类静态方法返回一个对象。不是两个,更不是三个。

<?php

interface Transport{

        public function go();

 }

class Bus implements Transport{

        public function go(){

                echo "bus每一站都要停";

        }

}

class Car implements Transport{

        public function go(){

                echo "car跑的飞快";

        }

}

class Bike implements Transport{

        public function go(){

                echo "bike比较慢";

        }

}

class transFactory{

        public static function factory($transport)

        {


                switch ($transport) {

                        case 'bus':

                        return new Bus();

                        break;

                case 'car':

                        return new Car();

                        break;

                case 'bike':

                        return new Bike();

                        break;

                }

        }

}

$transport=transFactory::factory('car');

$transport->go();

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前几天写了对单列模式的理解和学习技巧,这只是我个人对于这个开发模式的认识和理解,如果大家有更好的解释可以推荐给我啊...
    破晓丨阅读 452评论 0 2
  • 书接上文,简单工厂模式。发现简单工厂模式有着致命的问题,不符合开闭原则; 所谓开闭原则,对于扩展是开放的,对于修改...
    水电梁师傅阅读 271评论 0 0
  • 定义: 工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳...
    浪漫宇宙与人间日常阅读 293评论 0 0
  • 心不曾变爱已散 作者:孤夜芳心 原谅没有能力的我,现在还给不了你想要的生活,原谅平庸的我,现在还是个追梦者。谢谢你...
    陈霓裳阅读 355评论 0 25
  • 2013.09.25 亦:公车站对面长着好几棵挺大的无患,从前我不认识,现在认得了,倒是常常能在心灰意冷时见到这树...
    可瑞阅读 356评论 0 0

友情链接更多精彩内容