工厂方法模式

工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它提供了一个接口,用于创建对象,但允许子类决定实例化的类是哪一个。这样,工厂方法模式将对象的创建逻辑委托给子类,从而实现了创建过程与具体类的解耦。以下是详细介绍,包括JAVA代码示例、注释以及运行结果。

一、工厂方法模式简介

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

  2. 角色

  • (1)抽象工厂(Factory):定义了一个用于创建对象的接口。
  • (2)具体工厂(ConcreteFactory):实现了抽象工厂的接口,负责实例化产品对象。 (3)抽象产品(Product):定义了产品的接口。
  • (4)具体产品(ConcreteProduct):实现了抽象产品接口,具体的产品类。
  1. 优点
  • (1)具有良好的扩展性,新增产品时只需要增加相应的具体产品和具体工厂类。
  • (2)符合开闭原则,无需修改已有代码。
  • (3)降低了客户端与具体产品的耦合。
  1. 缺点
  • (1)类数量增多,增加了系统的复杂度。
  • (2)增加了系统的抽象性和理解难度。

二、JAVA代码示例及注释以下是一个简单的工厂方法模式示例,以生产不同品牌的手机为例。

  1. 抽象产品类:Phone.java
java 复制代码
public interface Phone {
    void produce();
}
  1. 具体产品类:XiaomiPhone.java
java 复制代码
public class XiaomiPhone implements Phone {
    @Override
    public void produce() {
        System.out.println("生产小米手机");
    }
}
  1. 具体产品类:HuaweiPhone.java
java 复制代码
public class HuaweiPhone implements Phone {
    @Override
    public void produce() {
        System.out.println("生产华为手机");
    }
}
  1. 抽象工厂类:Factory.java
java 复制代码
public interface Factory {
    Phone createPhone();
}
  1. 具体工厂类:XiaomiFactory.java
java 复制代码
public class XiaomiFactory implements Factory {
    @Override
    public Phone createPhone() {
        return new XiaomiPhone();
    }
}
  1. 具体工厂类:HuaweiFactory.java
java 复制代码
public class HuaweiFactory implements Factory {
    @Override
    public Phone createPhone() {
        return new HuaweiPhone();
    }
}
  1. 客户端类:Client.java
java 复制代码
public class Client {
    public static void main(String[] args) {
        Factory factory = new XiaomiFactory();
        Phone phone = factory.createPhone();
        phone.produce();
        factory = new HuaweiFactory();
        phone = factory.createPhone();
        phone.produce();
    }
}

三、运行结果

java 复制代码
生产小米手机
生产华为手机

以上代码演示了工厂方法模式的基本用法。在实际项目中,可以根据需求为每个具体产品创建一个具体工厂类。当新增产品时,只需增加相应的具体产品和具体工厂类,而无需修改已有代码,从而实现了开闭原则。在实际应用中,工厂方法模式广泛应用于各种框架和库中,如Spring框架中的BeanFactory。掌握工厂方法模式,有助于提高代码的可维护性和扩展性。

相关推荐
卓码软件测评5 小时前
第三方软件测试机构【性能测试工具用LoadRunner还是JMeter?】
java·功能测试·测试工具·jmeter·性能优化
念何架构之路8 小时前
Go语言设计模式(七)组合模式
设计模式·组合模式
Lionel_SSL8 小时前
《深入理解Java虚拟机》第三章读书笔记:垃圾回收机制与内存管理
java·开发语言·jvm
记得开心一点嘛8 小时前
手搓Springboot
java·spring boot·spring
老华带你飞9 小时前
租房平台|租房管理平台小程序系统|基于java的租房系统 设计与实现(源码+数据库+文档)
java·数据库·小程序·vue·论文·毕设·租房系统管理平台
独行soc9 小时前
2025年渗透测试面试题总结-66(题目+回答)
java·网络·python·安全·web安全·adb·渗透测试
脑子慢且灵9 小时前
[JavaWeb]模拟一个简易的Tomcat服务(Servlet注解)
java·后端·servlet·tomcat·intellij-idea·web
华仔啊10 小时前
SpringBoot 中 6 种数据脱敏方案,第 5 种太强了,支持深度递归!
java·后端
异常驯兽师11 小时前
Spring 中处理 HTTP 请求参数注解全解析
java·spring·http
连合机器人12 小时前
晨曦中的守望者:当科技为景区赋予温度
java·前端·科技