摘要:工厂模式是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语言中的简单工厂模式和抽象工厂模式,探讨了两种工厂模式的区别。在实际开发过程中,应根据具体需求选择合适的工厂模式,以提高系统的可扩展性和可维护性。
Comments NOTHING