工厂模式(Factory Pattern)

在 Java 编程中,工厂模式(Factory Pattern)是一种创建对象的设计模式。它提供了一种创建对象的方式,允许子类决定实例化哪一个类。工厂模式主要用于将对象的创建逻辑从使用对象的代码中分离出来,这样可以减少系统中的耦合度,提高代码的灵活性和可维护性。

工厂模式有几种常见的变体:简单工厂模式、工厂方法模式和抽象工厂模式。以下是这三种模式的简单介绍和代码示例:

1. 简单工厂模式(Simple Factory Pattern)
简单工厂模式通过一个工厂类来创建对象,而不是直接在客户端代码中实例化对象。工厂类根据传入的信息决定创建哪个类的实例。

示例代码:

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

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

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

// 工厂类
class ProductFactory {
    public static Product createProduct(String type) {
        switch (type) {
            case "A":
                return new ProductA();
            case "B":
                return new ProductB();
            default:
                throw new IllegalArgumentException("Unknown product type");
        }
    }
}

// 客户端代码
public class Main {
    public static void main(String[] args) {
        Product productA = ProductFactory.createProduct("A");
        productA.use();
        
        Product productB = ProductFactory.createProduct("B");
        productB.use();
    }
}
2. 工厂方法模式(Factory Method Pattern)
工厂方法模式定义了一个接口用于创建对象,但让子类决定实例化哪一个类。工厂方法模式将对象的创建推迟到子类中进行。

示例代码:

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

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

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

// 工厂接口
interface ProductFactory {
    Product createProduct();
}

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

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

// 客户端代码
public class Main {
    public static void main(String[] args) {
        ProductFactory factoryA = new ProductAFactory();
        Product productA = factoryA.createProduct();
        productA.use();
        
        ProductFactory factoryB = new ProductBFactory();
        Product productB = factoryB.createProduct();
        productB.use();
    }
}
3. 抽象工厂模式(Abstract Factory Pattern)
抽象工厂模式提供了一个接口,用于创建一系列相关或依赖的对象,而无需指定它们具体的类。它通常用于创建产品族。

示例代码:

// 产品A接口
interface ProductA {
    void use();
}

// 产品B接口
interface ProductB {
    void use();
}

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

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

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

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

// 抽象工厂接口

interface AbstractFactory {
    ProductA createProductA();
    ProductB createProductB();
}

// 具体工厂1

class ConcreteFactory1 implements AbstractFactory {
    @Override
    public ProductA createProductA() {
        return new ProductA1();
    }

    @Override
    public ProductB createProductB() {
        return new ProductB1();
    }
}

// 具体工厂2

class ConcreteFactory2 implements AbstractFactory {
    @Override
    public ProductA createProductA() {
        return new ProductA2();
    }

    @Override
    public ProductB createProductB() {
        return new ProductB2();
    }
}

// 客户端代码
 

public class Main {
    public static void main(String[] args) {
        AbstractFactory factory1 = new ConcreteFactory1();
        ProductA productA1 = factory1.createProductA();
        ProductB productB1 = factory1.createProductB();
        productA1.use();
        productB1.use();
        
        AbstractFactory factory2 = new ConcreteFactory2();
        ProductA productA2 = factory2.createProductA();
        ProductB productB2 = factory2.createProductB();
        productA2.use();
        productB2.use();
    }
}

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,而不必暴露对象创建的逻辑。该模式定义了一个工厂类,它负责创建对象,并将其封装在一个方法中。 在.NET中,工厂模式通常使用静态方法或单例实现,其目的是创建一个对象,而无需揭示创建过程的内部细节。这种方法可以提高代码的可维护性和可复用性,并降低耦合度。 下面是一个简单的工厂模式示例,用于创建不同类型的动物: ```csharp public interface IAnimal { void Speak(); } public class Dog : IAnimal { public void Speak() { Console.WriteLine("Woof!"); } } public class Cat : IAnimal { public void Speak() { Console.WriteLine("Meow!"); } } public class AnimalFactory { public static IAnimal CreateAnimal(string type) { switch (type.ToLower()) { case "dog": return new Dog(); case "cat": return new Cat(); default: throw new ArgumentException("Invalid animal type"); } } } ``` 在上面的示例中,我们首先定义了一个IAnimal接口,它包含了Speak方法。然后,我们定义了两个具体的动物类Dog和Cat,它们实现了IAnimal接口。 最后,我们定义了一个AnimalFactory工厂类,它包含了一个静态方法CreateAnimal。该方法接受一个字符串参数,用于指定要创建的动物类型。根据给定的类型,工厂将创建相应的动物对象并返回。 使用工厂模式,我们可以轻松地创建不同类型的动物对象,而无需为每个对象创建单独的构造函数。此外,我们还可以轻松地添加新的动物类型,而无需修改现有代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值