工厂方法模式(附结构图和代码实现)

本文介绍了工厂方法模式,包括模式定义、结构图、代码实现、优缺点及适用环境。工厂方法模式允许子类决定实例化哪一个类,提高了系统的扩展性,但同时也增加了类的数量,提升了理解难度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、定义

定义一个用于创建对象的接口,但是让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到了子类。

二、工厂方法模式结构图

在这里插入图片描述

三、工厂方法模式代码实现

抽象产品: 将要批量生产的对象实体进行一个抽象提取,便于扩展更多实体

public abstract class Product{
    //所有产品类的公共业务方法
    public void methodSame(){
        //公共方法的实现
    }
    //声明抽象业务方法
    public abstract void methodDiff();
}

具体产品:继承抽象产品,将产品实例化:比如(披萨是抽象产品,实例化产品可以是各种口味的披萨,胡椒味,麻辣味等等)

public class ConcreteProduct extdents Product{
    //实现业务方法
    public void methodDiff(){
        //业务方法的实现
    }
}

抽象工厂 :对具体工厂进行的一个统一抽象,便于后面的扩展

public interface Factory{
    public Product factoryMethod();
}

具体工厂:返回工厂的具体产品

public class ConcreteFactory implements Factory{
    public Product factryMethod(){
        return new ConcreteProduct();
    }
}

四、工厂方法模式优缺点

优点:

  1. 工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节,用户只需要关心所需要产品对应的工厂,无需关心创建的细节,甚至无需知道具体产品类的类名。
  2. 系统中加入新产品时,无需修改抽象工厂和抽象产品提供的接口,无需修改客户端,也无需修改其他的具体工厂和具体产品,只用添加一个具体工厂和具体产品即可,完全符合开闭原则

缺点:

  1. 每添加一个新的具体产品的时候就需要编写新的具体产品类和对应的具体工厂类,当具体产品数量多的时候,类的个数就增加了,会给系统带来额外的开销
  2. 考虑到系统的可扩展性,增加了工厂接口这一抽象层,在客户端均使用的抽象层进行定义,增加了系统的抽象性和理解难度。

五、工厂方法模式适用环境

  1. 客户端不知道它所需要的具体对象类(产品被抽象)
  2. 抽象工厂类通过其子类来指定创建哪个对象(工厂被抽象)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值