Java设计模式——简单工厂模式

简单工厂模式

定义

定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。

结构

Factory(工厂角色)
工厂类,负责创建所有产品实例的内部逻辑;可以被外界直接调用,创建所需的产品对象;在工厂类中提供了静态的工厂方法factoryMethod,返回值是抽象产品类型Product
Product(抽象产品角色)
是工厂类创建的所有对象的父类,封装了各种产品对象的公有方法,提高了系统的灵活性,使得在工厂类中只需定义一个通用的工厂方法。
ConcreteProduct(具体产品角色)
是简单工厂的创建目标,所有被创建的对象都充当这个角色的某个具体类的实例。每一个具体产品角色都继承了抽象产品角色,需要实现在抽象产品中声明的抽象方法。

类图

简单工厂模式类图

实现过程

先创建一个抽象产品类,可以在里面写具体产品公有的一些具体方法,以及具体产品之间不同的需要实现的一些抽象方法。
创建具体产品类,实现或者继承抽象产品,并实现抽象方法。
创建一个工厂类,里面有一个静态方法(用来创建具体产品,静态方法使用公共内存空间的,所有对象都可以直接引用,不需要创建对象再使用该方法)。在里面写读取配置文件的方法以及判断逻辑(if…else),返回产品。

优点

  1. 客户端可以免除直接创建产品对象的职责,而仅仅“消费”产品,实现了对象创建和使用的分离(直接去买手机,而不需要自己制造)。
  2. 客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可(如在工厂类里写了,如果传过来的是“c”,就创建“圆”)。
  3. 引入配置文件,可以在不修改任何一行代码的情况下更换和增加新的具体产品类(符合开闭原则)。

缺点

  1. 工厂类集中了所有产品的创建逻辑(if…else语句),职责过重(违背了单一职责原则)。
  2. 增加了类的个数,因而增加了系统的复杂度和理解难度。
  3. 系统扩展困难(虽然可以读配置文件传参数,但是逻辑判断语句写在工厂类里面)。在产品类型较多时有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。
  4. 使用了静态方法,造成工厂角色无法形成基于继承的等级结构。

适用环境

  1. 工厂类创建的对象较少,不会造成工厂类中的逻辑过于复杂。
  2. 客户端只知道传入工厂的参数,对于如何创建对象并不关心。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值