简单工厂和工厂方法模式在Java中的实现
一、简单工厂模式
1. 概述
简单工厂模式是一种创建型设计模式,它提供了一个统一的接口来创建不同类型的对象。根据不同的参数,工厂类能够返回不同类的实例。这种模式在不暴露对象实例化逻辑的同时,将其封装在一个工厂类中。
2. 实现步骤
下面是简单工厂模式的实现步骤:
步骤 | 描述 |
---|---|
1 | 定义一个抽象产品类,该类将被不同类型的具体产品类继承。 |
2 | 定义具体产品类,它们继承了抽象产品类,并实现了相应的功能。 |
3 | 定义一个工厂类,它包含一个创建产品的方法,根据参数的不同返回不同的具体产品实例。 |
3. 代码示例
首先,我们定义一个抽象产品类Product
:
public abstract class Product {
public abstract void operation();
}
然后,我们定义两个具体产品类ConcreteProductA
和ConcreteProductB
,它们继承了Product
类并实现了operation
方法:
public class ConcreteProductA extends Product {
@Override
public void operation() {
System.out.println("ConcreteProductA operation");
}
}
public class ConcreteProductB extends Product {
@Override
public void operation() {
System.out.println("ConcreteProductB operation");
}
}
接下来,我们定义一个工厂类SimpleFactory
,它包含一个创建产品的方法createProduct
,根据传入的参数不同返回不同的具体产品实例:
public class SimpleFactory {
public static Product createProduct(String type) {
if (type.equals("A")) {
return new ConcreteProductA();
} else if (type.equals("B")) {
return new ConcreteProductB();
} else {
throw new IllegalArgumentException("Invalid product type.");
}
}
}
最后,我们可以在客户端代码中使用简单工厂模式创建具体产品的实例:
public class Client {
public static void main(String[] args) {
Product productA = SimpleFactory.createProduct("A");
productA.operation();
Product productB = SimpleFactory.createProduct("B");
productB.operation();
}
}
以上代码的输出结果为:
ConcreteProductA operation
ConcreteProductB operation
二、工厂方法模式
1. 概述
工厂方法模式是一种创建型设计模式,它将对象的创建委托给子类来完成。工厂方法模式定义了一个用于创建对象的接口,子类可以决定实例化哪一个类。这种模式能够将对象的创建和使用分离,降低了耦合性。
2. 实现步骤
下面是工厂方法模式的实现步骤:
步骤 | 描述 |
---|---|
1 | 定义一个抽象产品类,该类将被不同类型的具体产品类继承。 |
2 | 定义一个抽象工厂类,该类包含一个创建产品的抽象方法。 |
3 | 定义具体产品类,它们继承了抽象产品类,并实现了相应的功能。 |
4 | 定义具体工厂类,它继承了抽象工厂类,并实现了创建产品的抽象方法,根据需要返回相应的具体产品实例。 |
3. 代码示例
首先,我们定义一个抽象产品类Product
:
public abstract class Product {
public abstract void operation();
}
然后,我们定义两个具体产品类ConcreteProductA
和ConcreteProductB
,它们继承了Product
类并实现了operation
方法:
public class ConcreteProductA extends Product {
@Override
public void operation() {
System.out.println("ConcreteProductA operation");
}
}
public class ConcreteProductB extends Product {
@Override