工厂模式有三种,简单工厂,工厂模式和抽象工厂模式,严格来说简单工厂模式不算是一种设计模式。它们的主要作用就是根据不同的条件来产生不同的对象,而不需要大量的去new对象。这次先了解一下简单工厂和工厂模式。

工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。著名的Jave论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。

涉及到四个角色:

抽象工厂角色:这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。

具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。

抽象产品角色:它是具体产品继承的父类或者是实现的接口。

具体产品角色:具体工厂角色所创建的对象就是此角色的实例。

何时使用:需要根据不同条件创建不同实例时。

应用实例:1、您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。2、Hibernate 换数据库只需换方言和驱动就可以。

优点:1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。3、屏蔽产品的具体实现,调用者只关心产品的抽象类或者接口。

缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

使用场景:1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。3、设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP",可以把这三个作为产品类,共同实现一个接口。

注意事项:作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。

一般业务不是很复杂时,可以建立简单工厂模式,如果业务比较复杂,对扩展性要求更多的时候,可以建立工厂模式的代码。下边是用PHP写的一个数据库连接简单工厂:

<?php//创建抽象类
abstract class  DbConnection{abstract public function Connection();
}//创建继承抽象类的实体类MSSQL/MySql/Oracle
class MSSqlConnection extends DbConnection{function Connection(){echo 'MSSql Connection.';     }
}class MySqlConnection extends DbConnection{function Connection(){echo 'MySql Connection.';}
}class OracleConnection extends DbConnection{function Connection(){echo 'Oracle Connection.';}
}//创建一个工厂,生成基于给定信息的实体类的对象
class ConnectionFactory{public static function GetConnection($DbType){switch ($DbType) {case 'MSSql' :return new MSSqlConnection ();break;case 'MySql' :return new MySqlConnection ();break;case 'Oracle' :return new OracleConnection ();break;}}}//根据传入的值来生成不同的对象,并使用各自的方法
$Connection = ConnectionFactory::GetConnection('Oracle');
$Connection->Connection();?>

上边的时一个简单工厂的例子,简单工厂模式适用于业务简单的情况下或者具体产品很少增加的情况。而对于复杂的业务环境可能不太适应了。这时候就需要工厂模式,下边的代码是工厂模式:

<?php//创建抽象类
abstract class  DbConnection{abstract public function Connection();
}//创建继承抽象类的实体类MSSQL/MySql/Oracle
class MSSqlConnection extends DbConnection{function Connection(){echo 'MSSql Connection.';     }
}class MySqlConnection extends DbConnection{function Connection(){echo 'MySql Connection.';}
}class OracleConnection extends DbConnection{function Connection(){echo 'Oracle Connection.';}
}//创建抽象工厂
abstract class AbstractFactory{abstract  static function CreateConnection();
}//具体工厂
class MSSqlFactory extends AbstractFactory{public static function CreateConnection(){return new MSSqlConnection();}
}class MySqlFactory extends AbstractFactory{public static function CreateConnection(){return new MySqlConnection();}
}class OracleFactory extends AbstractFactory{public static function CreateConnection(){return new OracleConnection();}
}//根据不同的工厂生成不同的对象,并使用各自的方法
$Connection = OracleFactory::CreateConnection();
$Connection->Connection();?>

设计模式——工厂模式 1相关推荐

  1. Java设计模式-工厂模式(3)抽象工厂模式

    在Java设计模式-工厂模式(2)工厂方法模式 我们知道了工厂方法模式解决了简单工厂模式中的缺陷,做到了满足开闭原则,但是时代是进步的,进而又产生新的问题,工厂难道只能生产一种东西吗.我们所见到的工厂 ...

  2. Java设计模式-工厂模式(2)工厂方法模式

    在Java设计模式-工厂模式(1)简单工厂模式 中我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而"工厂方法模式"是对简单工厂模式的进一步抽象化,其好处是可以使系统在不 ...

  3. Java设计模式-工厂模式(1)简单工厂模式

    Java设计模式-工厂模式(1)简单工厂模式 一.前言 1)例子 2)类图关系 3)代码实现 二.简单工厂模式 2.1.概述: 2.2.类图关系: 2.3.代码修改: 2.4.优缺点 2.5.扩展-简 ...

  4. 设计模式---工厂模式

    设计模式---工厂模式 工厂方法模式 概述:工厂方法模式中抽象工厂负责定义创建对象的接口,具体创建工作由继承抽象工厂的具体类实现. 优点:客户端不需要再负责对象的创建,从而明确了各个类的职责,如果有新 ...

  5. java设计模式工厂模式_Java中的工厂设计模式

    java设计模式工厂模式 Welcome to the Factory Design Pattern in Java tutorial. Factory Pattern is one of the C ...

  6. java设计模式工厂模式_Java中的复合设计模式

    java设计模式工厂模式 Composite pattern is one of the Structural design pattern. Composite design pattern is ...

  7. java设计模式工厂模式_Java中的桥梁设计模式

    java设计模式工厂模式 Today we will look into Bridge Design Pattern in java. When we have interface hierarchi ...

  8. java设计模式工厂模式_Java中的外观设计模式

    java设计模式工厂模式 Facade Design Pattern is one of the Structural design patterns (such as Adapter pattern ...

  9. 设计模式-工厂模式(学习)

    设计模式-工厂模式(学习) 在程序的世界里,就像射雕英雄传一样,我们的技能就像是武功一样,我们只有不断去学习练习才能有机会像郭靖一样成为"天下第一". 我认为技能和武功是很类似的, ...

  10. 设计模式-工厂模式的3中不同实现[JAVA]

    设计模式-工厂模式的3中不同实现[JAVA] 工厂模式简介 In Factory pattern, we create object without exposing the creation log ...

最新文章

  1. C# where用法
  2. POJ 2455Secret Milking Machine(二分+网络流之最大流)
  3. Python机器学习:PCA与梯度上升:04求数据的前n个主成分
  4. 深度装机大师一键重装_电脑店U盘重装系统教程
  5. 烧写器--SPI NAND FLASH烧录定制说明
  6. AR工业应用|企业中使用的7个增强现实创新案例|effiarAR工业云平台
  7. 工控蜜罐 Conpot 的进阶玩法
  8. 你理解大话西游片尾那句“他好像一条狗”吗?
  9. 智能化的Conversational UI是移动发展的一个趋势
  10. 【深度学习笔记1.1】人工神经网络(内含模型保存与恢复介绍)
  11. 电气火灾监控系统技术分析
  12. MATLAB算法实战应用案例精讲-【智能优化算法】强度帕累托进化算法 2 (SPEA2)(附MATLAB代码实现)
  13. 安徽大学线性代数习题册第四章详细答案
  14. ROS开发实践-QT工具箱
  15. js内置对象及常用方法
  16. 解决上手使用Colab、Kaggle时遇到的问题
  17. MySQL 常见时间获取整理(当日、当月、当年、上一日、上一月、上一年,当月第一天,当年第一天等等)
  18. 左旋肉碱的网络营销故事
  19. 矩阵求导-2——分子布局与分母布局
  20. python3多线程批量去除电视剧的片头片尾

热门文章

  1. iCode:开源的在线 html/css/js 编辑器
  2. git/icode操作记录
  3. Chrome 浏览器扩展神器暴力猴
  4. 金蝶KIS专业版本单据导入导出工具使用说明
  5. HDFS教程(06)- HDFS纠删码
  6. Win11进桌面闪屏,亲测恢复正常
  7. 怎么清理服务器数据库日志文件,SQL SERVER 数据库日志清理图文教程
  8. 【软件测试】:测试通过标准
  9. 人脸识别数据集和特点
  10. 2021年大学生可以参加的科创竞赛-最全信息汇总