工厂模式的使用频率比较高。它的定义为:定义一个类,该类主要负责系统的去实例化一些其它的类。通俗点说就是,你告诉我你须要哪一个类的实例便可,其它的你不用管,我帮你去实例化,你只管用便可。php
工厂对象可能会动态地建立产品对象的类,或者从对象池中返回一个对象,或者对所建立的对象进行复杂的配置,或者应用其余的操做。从定义上看,单例模式也是一种工厂模式的实现,由于它为你实例化了一个特定的对象供系统使用。mysql
数据库驱动:各个 WEB 框架的数据库驱动逻辑,其中就有工厂模式的影子。大多数的框架会支持多种数据库如 oracle / mysql / sql server 等,此时在配置项里,只需提供一下约定好的数据库平台的字符串名称便可,无需本身实例化数据库驱动。 WEB 框架收到要实例化的数据库名称后,调用工厂模式方法,实例化相应的数据库驱动后,供后续代码使用。web
链接邮件服务器的类:能够链接邮件服务器的方法有 POP3,IMAP,HTTP ,此时能够写一个工厂类负责实例化这几种链接方法,若是某一天对方增长了 webSerives 链接方法,那么直接在工厂类里作相应的修改便可。sql
class ConnectionFactory { function static getConnection($db_class_name) { $db_class_name = strtolower($db_class_name); if (include_once 'Drivers/' . $db_class_name . '.php') { $classname = 'Driver_' . $db_class_name; return new $db_class_name; } else { throw new Exception ('The specify class driver file didn not found. '); } } } ConnectionFactory::getConnection("mysql"); ConnectionFactory::getConnection("oracle");
若是有了新的数据库驱动类,只须要在 drivers 下加入相应的驱动文件便可,固然要符合相应驱动规则。数据库
一个调用者想建立一个对象,只要知道其名称就能够了。封装了实例化过程,使用者不在须要关心过多的实例化过程,只须要提供约定好的实例化标识便可。服务器
扩展性高,若是想增长一个“产品”,只要扩展一个工厂类或者是修改工厂的生产过程便可。 3. 屏蔽产品的具体实现,调用者只关心产品的接口,产品类不论如何变化都再也不影响其实例化过程。oracle
每次增长一个产品时,都须要增长或者修改一个具体类和对象实现工厂,在必定程度上增长了系统的复杂度,同时也增长了系统具体类的依赖。框架