Java中的工厂模式详解:简单工厂、工厂方法、抽象工厂

工厂模式是Java中常用的一种设计模式,它可以帮助我们更好地管理对象的创建过程。本文将详解Java中的工厂模式,包括简单工厂、工厂方法和抽象工厂,同时提供易于编程小白阅读学习的代码案例。


一、简单工厂模式

简单工厂模式是工厂模式的一种,它通过一个工厂类,根据传入的参数来创建不同的产品类实例。具体代码实现如下:

public interface Product {
    void show();
}

public class ConcreteProduct1 implements Product {

    @Override
    public void show() {
        System.out.println("这是产品1");
    }
}

public class ConcreteProduct2 implements Product {

    @Override
    public void show() {
        System.out.println("这是产品2");
    }
}

public class SimpleFactory {
    public static Product createProduct(int type) {
        if (type == 1) {
            return new ConcreteProduct1();
        } else if (type == 2) {
            return new ConcreteProduct2();
        }
        return null;
    }
}

以上代码中,Product为产品接口,ConcreteProduct1和ConcreteProduct2为具体产品类,SimpleFactory为简单工厂类,其中createProduct方法根据传入参数type的不同返回不同的产品实例。


二、工厂方法模式

工厂方法模式是指定义一个用于创建对象的接口,让子类决定将哪一个类实例化。具体代码实现如下:

public interface Product {
    void show();
}

public class ConcreteProduct1 implements Product {

    @Override
    public void show() {
        System.out.println("这是产品1");
    }
}

public class ConcreteProduct2 implements Product {

    @Override
    public void show() {
        System.out.println("这是产品2");
    }
}

public interface Factory {
    Product createProduct();
}

public class ConcreteFactory1 implements Factory {

    @Override
    public Product createProduct() {
        return new ConcreteProduct1();
    }
}

public class ConcreteFactory2 implements Factory {

    @Override
    public Product createProduct() {
        return new ConcreteProduct2();
    }
}

以上代码中,Product为产品接口,ConcreteProduct1和ConcreteProduct2为具体产品类,Factory为工厂接口,ConcreteFactory1和ConcreteFactory2为具体工厂类,其中createProduct方法根据不同的工厂实现返回不同的产品实例。


三、抽象工厂模式

抽象工厂模式是指提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。具体代码实现如下:

public interface ProductA {
    void show();
}

public class ConcreteProductA1 implements ProductA {

    @Override
    public void show() {
        System.out.println("这是A1产品");
    }
}

public class ConcreteProductA2 implements ProductA {

    @Override
    public void show() {
        System.out.println("这是A2产品");
    }
}

public interface ProductB {
    void show();
}

public class ConcreteProductB1 implements ProductB {

    @Override
    public void show() {
        System.out.println("这是B1产品");
    }
}

public class ConcreteProductB2 implements ProductB {

    @Override
    public void show() {
        System.out.println("这是B2产品");
    }
}

public interface Factory {
    ProductA createProductA();
    ProductB createProductB();
}

public class ConcreteFactory1 implements Factory {

    @Override
    public ProductA createProductA() {
        return new ConcreteProductA1();
    }

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

public class ConcreteFactory2 implements Factory {

    @Override
    public ProductA createProductA() {
        return new ConcreteProductA2();
    }

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

以上代码中,ProductA和ProductB为产品接口,ConcreteProductA1、ConcreteProductA2、ConcreteProductB1和ConcreteProductB2为具体产品类,Factory为工厂接口,ConcreteFactory1和ConcreteFactory2为具体工厂类,其中createProductA和createProductB方法分别返回不同的产品实例。

猿教程
请先登录后发表评论
  • 最新评论
  • 总共0条评论