Java 语言 工厂模式应用 简单工厂与抽象工厂的区别

Java阿木 发布于 20 天前 5 次阅读


摘要:工厂模式是Java设计模式中常用的一种创建型模式,它提供了一种创建对象的方法,将对象的创建与对象的用户分离,从而降低系统的耦合度。本文将围绕Java语言中的工厂模式,探讨简单工厂与抽象工厂的区别,并通过代码示例进行详细解析。

一、

在软件开发过程中,对象的创建是一个常见的操作。如果直接在客户端代码中创建对象,会导致代码的耦合度较高,不利于系统的扩展和维护。工厂模式通过提供一个工厂类来创建对象,将对象的创建与对象的用户分离,从而降低系统的耦合度。

Java中的工厂模式主要分为两种:简单工厂模式和抽象工厂模式。这两种模式在实现方式上有所不同,下面将分别进行介绍。

二、简单工厂模式

简单工厂模式是一种最简单的工厂模式,它只有一个工厂类,负责创建所有类型的对象。简单工厂模式适用于产品种类较少的情况。

1. 简单工厂模式的类图

简单工厂模式的类图如下:


+-----------------+


| Factory |


+-----------------+


| +createProduct() |


+-----------------+


2. 简单工厂模式的实现

下面是一个简单工厂模式的实现示例:

java

// 产品类


class Product {


public void use() {


System.out.println("使用产品");


}


}

// 具体产品类


class ConcreteProductA extends Product {


@Override


public void use() {


System.out.println("使用产品A");


}


}

class ConcreteProductB extends Product {


@Override


public void use() {


System.out.println("使用产品B");


}


}

// 简单工厂类


class SimpleFactory {


public static Product createProduct(String type) {


if ("A".equals(type)) {


return new ConcreteProductA();


} else if ("B".equals(type)) {


return new ConcreteProductB();


}


return null;


}


}

// 客户端代码


public class SimpleFactoryDemo {


public static void main(String[] args) {


Product productA = SimpleFactory.createProduct("A");


productA.use();

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


productB.use();


}


}


三、抽象工厂模式

抽象工厂模式是一种更高级的工厂模式,它包含多个工厂类,每个工厂类负责创建一组相关联的产品。抽象工厂模式适用于产品种类较多,且产品之间存在关联关系的情况。

1. 抽象工厂模式的类图

抽象工厂模式的类图如下:


+-----------------+


| FactoryA |


+-----------------+


| +createProductA() |


| +createProductB() |


+-----------------+


+-----------------+


| FactoryB |


+-----------------+


| +createProductA() |


| +createProductB() |


+-----------------+


2. 抽象工厂模式的实现

下面是一个抽象工厂模式的实现示例:

java

// 产品类


interface ProductA {


void use();


}

interface ProductB {


void use();


}

// 具体产品类A


class ConcreteProductA implements ProductA {


@Override


public void use() {


System.out.println("使用产品A");


}


}

// 具体产品类B


class ConcreteProductB implements ProductB {


@Override


public void use() {


System.out.println("使用产品B");


}


}

// 抽象工厂类


interface Factory {


ProductA createProductA();


ProductB createProductB();


}

// 具体工厂类A


class ConcreteFactoryA implements Factory {


@Override


public ProductA createProductA() {


return new ConcreteProductA();


}

@Override


public ProductB createProductB() {


return new ConcreteProductB();


}


}

// 具体工厂类B


class ConcreteFactoryB implements Factory {


@Override


public ProductA createProductA() {


return new ConcreteProductA();


}

@Override


public ProductB createProductB() {


return new ConcreteProductB();


}


}

// 客户端代码


public class AbstractFactoryDemo {


public static void main(String[] args) {


Factory factoryA = new ConcreteFactoryA();


ProductA productA = factoryA.createProductA();


productA.use();

ProductB productB = factoryA.createProductB();


productB.use();

Factory factoryB = new ConcreteFactoryB();


ProductA productC = factoryB.createProductA();


productC.use();

ProductB productD = factoryB.createProductB();


productD.use();


}


}


四、简单工厂与抽象工厂的区别

1. 产品种类

简单工厂模式适用于产品种类较少的情况,而抽象工厂模式适用于产品种类较多,且产品之间存在关联关系的情况。

2. 工厂类

简单工厂模式只有一个工厂类,负责创建所有类型的对象,而抽象工厂模式包含多个工厂类,每个工厂类负责创建一组相关联的产品。

3. 扩展性

简单工厂模式的扩展性较差,当需要添加新的产品时,需要修改工厂类,而抽象工厂模式的扩展性较好,只需添加新的具体工厂类即可。

五、总结

本文通过Java语言中的简单工厂模式和抽象工厂模式,探讨了两种工厂模式的区别。在实际开发过程中,应根据具体需求选择合适的工厂模式,以提高系统的可扩展性和可维护性。