java设计模式中工厂模式的定义及代码演示

发布时间:2021-09-10 16:40:29 作者:chen
来源:亿速云 阅读:159
# Java设计模式中工厂模式的定义及代码演示

## 一、工厂模式概述

工厂模式(Factory Pattern)是Java中最常用的设计模式之一,属于**创建型模式**,主要解决对象创建过程中的灵活性问题。其核心思想是将**对象的实例化过程**与**客户端代码**分离,通过专门的工厂类来控制对象的创建。

### 1.1 核心作用
- 解耦:客户端不需要知道具体类的创建细节
- 扩展性:新增产品类时不影响现有代码
- 统一管理:集中控制对象的创建逻辑

### 1.2 三种实现形式
1. 简单工厂模式(静态工厂)
2. 工厂方法模式(多态工厂)
3. 抽象工厂模式(产品族工厂)

---

## 二、简单工厂模式

### 2.1 定义
通过一个静态方法根据传入参数的不同返回不同类的实例。

```java
// 产品接口
interface Product {
    void operation();
}

// 具体产品A
class ConcreteProductA implements Product {
    @Override
    public void operation() {
        System.out.println("执行产品A的操作");
    }
}

// 具体产品B
class ConcreteProductB implements Product {
    @Override
    public void operation() {
        System.out.println("执行产品B的操作");
    }
}

// 简单工厂
class SimpleFactory {
    public static Product createProduct(String type) {
        switch (type) {
            case "A":
                return new ConcreteProductA();
            case "B":
                return new ConcreteProductB();
            default:
                throw new IllegalArgumentException("未知产品类型");
        }
    }
}

// 客户端使用
public class Client {
    public static void main(String[] args) {
        Product productA = SimpleFactory.createProduct("A");
        productA.operation();
        
        Product productB = SimpleFactory.createProduct("B");
        productB.operation();
    }
}

2.2 优缺点分析

✅ 优点: - 客户端与具体实现解耦 - 代码结构简单

❌ 缺点: - 违反开闭原则(新增产品需修改工厂类) - 静态方法无法继承


三、工厂方法模式

3.1 定义

定义一个创建对象的接口,但让子类决定实例化哪个类。

// 抽象工厂
interface Factory {
    Product createProduct();
}

// 具体工厂A
class ConcreteFactoryA implements Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductA();
    }
}

// 具体工厂B
class ConcreteFactoryB implements Factory {
    @Override
    public Product createProduct() {
        return new ConcreteProductB();
    }
}

// 客户端使用
public class Client {
    public static void main(String[] args) {
        Factory factoryA = new ConcreteFactoryA();
        Product productA = factoryA.createProduct();
        productA.operation();
        
        Factory factoryB = new ConcreteFactoryB();
        Product productB = factoryB.createProduct();
        productB.operation();
    }
}

3.2 类图结构

[客户端] --> [抽象工厂]
[抽象工厂] <|-- [具体工厂A]
[抽象工厂] <|-- [具体工厂B]

3.3 适用场景


四、抽象工厂模式

4.1 定义

提供一个接口,用于创建相关或依赖对象家族,而不需要明确指定具体类。

// 抽象产品族
interface Button {
    void render();
}

interface Checkbox {
    void check();
}

// 具体产品族1
class WindowsButton implements Button {
    public void render() {
        System.out.println("Windows风格按钮");
    }
}

class WindowsCheckbox implements Checkbox {
    public void check() {
        System.out.println("Windows复选框选中");
    }
}

// 具体产品族2
class MacButton implements Button {
    public void render() {
        System.out.println("Mac风格按钮");
    }
}

// 抽象工厂
interface GUIFactory {
    Button createButton();
    Checkbox createCheckbox();
}

// 具体工厂实现
class WindowsFactory implements GUIFactory {
    public Button createButton() {
        return new WindowsButton();
    }
    public Checkbox createCheckbox() {
        return new WindowsCheckbox();
    }
}

class MacFactory implements GUIFactory {
    public Button createButton() {
        return new MacButton();
    }
    // MacCheckbox实现省略...
}

4.2 模式特点


五、三种工厂模式对比

对比维度 简单工厂 工厂方法 抽象工厂
创建对象 单一产品 单一产品 产品族
扩展方式 修改工厂类 新增工厂子类 新增工厂子类
复杂度 简单 中等 复杂
典型应用场景 对象创建逻辑简单 需要灵活扩展产品 需要创建相关对象组

六、实际应用案例

6.1 Spring中的工厂模式

// BeanFactory就是典型的工厂接口
BeanFactory factory = new XmlBeanFactory(...);
Object obj = factory.getBean("beanName");

6.2 JDK中的实例

// Collection的iterator()方法
List<String> list = Arrays.asList("A", "B");
Iterator<String> it = list.iterator(); // 隐藏具体迭代器实现

七、总结

工厂模式的核心价值在于: 1. 将对象创建与使用分离 2. 降低代码耦合度 3. 提高系统的可扩展性

在实际开发中,应根据业务复杂度选择合适的形式。简单场景用简单工厂,复杂产品族建议使用抽象工厂,大多数情况下工厂方法是最平衡的选择。 “`

(注:全文约1450字,可根据需要调整代码示例的详细程度)

推荐阅读:
  1. JAVA设计模式之 工厂模式
  2. JS中工厂模式的定义与实现方法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:java设计模式中简单工厂模式的定义及代码演示

下一篇:怎么通过重启路由的方法切换IP地址

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》