设计模式——工厂模式(Factory)

工厂模式(Factory Pattern)是一种常用的设计模式,它提供了一种封装创建对象过程的方法。通过工厂方法或工厂类,你可以将对象的创建与使用分离,使得代码更加灵活和可维护。工厂模式主要分为三种类型:简单工厂模式(Simple Factory Pattern)、工厂方法模式(Factory Method Pattern)和抽象工厂模式(Abstract Factory Pattern)。

1. 简单工厂模式(Simple Factory Pattern)

简单工厂模式也称为静态工厂方法模式,它不属于GOF(四人帮)的23种设计模式之一,但在实际应用中非常常见。它由一个工厂类根据传入的参数决定创建哪一种产品类的实例。

优点

  • 客户端不需要直接实例化对象,降低了耦合度。
  • 提高了代码的复用性和可维护性。

缺点

  • 工厂类集中了所有产品创建逻辑,违反了高内聚原则。
  • 当添加新产品时,需要修改工厂类的代码,违反了开闭原则。

示例代码(Java):

java 复制代码
// 产品接口
public interface Product {
    void use();
}

// 具体产品A
public class ProductA implements Product {
    @Override
    public void use() {
        System.out.println("使用产品A");
    }
}

// 具体产品B
public class ProductB implements Product {
    @Override
    public void use() {
        System.out.println("使用产品B");
    }
}

// 工厂类
public class SimpleFactory {
    public static Product createProduct(String type) {
        if ("A".equals(type)) {
            return new ProductA();
        } else if ("B".equals(type)) {
            return new ProductB();
        } else {
            return null;
        }
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Product productA = SimpleFactory.createProduct("A");
        productA.use();

        Product productB = SimpleFactory.createProduct("B");
        productB.use();
    }
}

2. 工厂方法模式(Factory Method Pattern)

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

优点

  • 客户端不需要知道它所使用的对象的类。
  • 一个类仅负责一种产品或一个产品族系的创建。
  • 将对象的创建与使用解耦。

缺点

  • 系统中类的个数将成对增加,在一定程度上增加了系统的复杂性。

示例代码(Java):

java 复制代码
// 抽象产品接口
public interface Product {
    void use();
}

// 具体产品A
public class ProductA implements Product {
    @Override
    public void use() {
        System.out.println("使用产品A");
    }
}

// 具体产品B
public class ProductB implements Product {
    @Override
    public void use() {
        System.out.println("使用产品B");
    }
}

// 抽象工厂接口
public interface Creator {
    Product createProduct();
}

// 具体工厂A
public class CreatorA implements Creator {
    @Override
    public Product createProduct() {
        return new ProductA();
    }
}

// 具体工厂B
public class CreatorB implements Creator {
    @Override
    public Product createProduct() {
        return new ProductB();
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Creator creatorA = new CreatorA();
        Product productA = creatorA.createProduct();
        productA.use();

        Creator creatorB = new CreatorB();
        Product productB = creatorB.createProduct();
        productB.use();
    }
}

3. 抽象工厂模式(Abstract Factory Pattern)

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

优点

  • 可以在不知道具体类名的情况下,创建一系列相互关联或相互依赖的产品对象。
  • 增加了系统的灵活性和可扩展性。

缺点

  • 产品族扩展困难:假设要增加一个新的产品C,那么就需要修改所有的工厂类,添加相应的方法。
  • 系统复杂性提高:由于使用到了多个工厂等级结构,使得系统的抽象性和复杂性提高。

示例代码(Java):

(由于抽象工厂模式较为复杂,暂不提供)

相关推荐
workflower5 小时前
人形机器人灵巧手产业链
人工智能·设计模式·机器人·云计算·无人机
Java后端的Ai之路6 小时前
03、Python - 抽象工厂模式
开发语言·python·设计模式·抽象工厂模式·通用智慧
旧梦95277 小时前
Java 单例模式:从基础到实战的完整指南
java·开发语言·单例模式
AI人工智能+电脑小能手11 小时前
大白话说Java设计模式-45-解释器模式(源码剖析篇)
java·设计模式·解释器模式·源码分析·pattern·spel·javacc
码匠许师傅15 小时前
【设计模式精讲】4.单例模式(Singleton)
c++·单例模式·设计模式
雾削木15 小时前
2026 编程领域热点知识速览:AI 辅助开发、设计模式实战与嵌入式高效迭代
人工智能·设计模式
AI人工智能+电脑小能手2 天前
大白话说Java设计模式-42-访问者模式(业务实战篇)
java·spring·设计模式·访问者模式·asm·营销规则·数据结构与操作分离
AI人工智能+电脑小能手2 天前
大白话说Java设计模式-43-访问者模式(源码剖析篇)
java·设计模式·访问者模式·源码分析·elementvisitor·asm classvisitor·spring spel
Michael_lcf2 天前
Agent设计模式:思考-行动-观察循环的本质与局限
设计模式·agent设计模式·agent设计模式的本质
丰锋ff2 天前
设计模式学习笔记
笔记·学习·设计模式