当前位置: 首页 > 后端技术 > PHP

第二种PHP设计模式——工厂模式

时间:2023-03-29 17:50:23 PHP

定义了工厂模式的使用频率是比较高的。它的定义是:定义一个类,主要负责系统实例化其他一些类。通俗地说,只要告诉我你需要哪个类实例,其他的你不用操心。我会为你实例化它,你可以使用它。工厂对象可能会动态创建一类产品对象,或者从对象池中返回一个对象,或者对创建的对象执行复杂的配置,或者应用其他操作。顾名思义,单例模式也是工厂模式的一种实现,因为它实例化了一个特定的对象供你系统使用。应用实例数据库驱动:各个WEB框架的数据库驱动逻辑,有工厂模式的影子。大部分框架都支持oracle/mysql/sqlserver等多种数据库,此时在配置项中只需要提供约定的数据库平台的字符串名称即可,无需自己实例化数据库驱动。WEB框架接收到要实例化的数据库名称后,调用工厂模式方法,实例化对应的数据库驱动,供后续代码使用。连接邮件服务器的类:可以连接邮件服务器的方式有POP3、IMAP、HTTP。这时候,你可以写一个工厂类来实例化这些连接方法。如果哪天对方增加了一个webServives的连接方法,那么直接在工厂类中进行相应的修改就可以了。代码示例classConnectionFactory{functionstaticgetConnection($db_class_name){$db_class_name=strtolower($db_class_name);if(include_once'Drivers/'.$db_class_name.'.php'){$classname='Driver_'.$db_class_name;返回新的$db_class_name;}else{thrownewException('找不到指定的类驱动程序文件。');}}}ConnectionFactory::getConnection("mysql");ConnectionFactory::getConnection("oracle");对于新建的数据库驱动类,只需要在drivers下添加相应的驱动文件即可,当然必须符合相应的驱动规则。优点想要创建对象的调用者只需要知道它的名字。实例化过程被封装,用户不再需要关心过多的实例化过程,只需要提供约定好的实例化标识即可。可扩展性高,如果要增加一个“产品”,只需要扩展一个工厂类或者修改工厂的生产流程即可。3.屏蔽产品的具体实现,调用者只关心产品的接口,无论产品类如何变化,都不会再影响其实例化过程。缺点每增加一个产品,都需要增加或修改具体的类和对象实现工厂,这在一定程度上增加了系统的复杂度,同时也增加了对系统具体类的依赖。