在软件开发中,工厂模式是一种设计模式,它允许我们创建对象,而无需将对象的实现细节暴露给客户端代码。在本文中,我们将讨论工厂模式的实现方式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。
一、简单工厂模式
简单工厂模式是最基础的工厂模式,它通过一个工厂类,根据传入的参数,返回一个特定的对象实例。因此,客户端代码不需要了解对象的具体实现细节,只需要知道如何使用这个对象即可。
简单工厂模式的实现方式非常简单。首先,定义一个抽象的产品类,该类为所有具体产品类定义了公共接口。其次,针对不同的产品类型,分别定义一个具体的实现类。最后,定义一个简单工厂类,该类根据传入的参数,动态的创建并返回不同类型的产品对象。示例代码如下:
```
// 抽象产品类
abstract class Product {
public abstract void use();
}
// 具体产品类
class ConcreteProductA extends Product {
public void use() {
System.out.println("Product A");
}
}
class ConcreteProductB extends Product {
public void use() {
System.out.println("Product B");
}
}
// 简单工厂类
class SimpleFactory {
public static Product createProduct(String type) {
switch (type) {
case "A":
return new ConcreteProductA();
case "B":
return new ConcreteProductB();
default:
throw new IllegalArgumentException("Invalid product type.");
}
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Product product = SimpleFactory.createProduct("A");
product.use();
}
}
```
二、工厂方法模式
工厂方法模式是针对简单工厂模式的一种优化,它通过引入抽象工厂类,将工厂的具体实现推迟到子类中实现。这样客户端代码只需要和抽象工厂类以及具体产品类交互,而具体的工厂和具体产品实现则分别在不同的子类中实现。
工厂方法模式的实现方式如下。首先,定义一个抽象工厂类,该类为所有具体工厂类定义了公共接口。其次,针对不同的产品类型,分别定义产品接口和具体实现类。最后,在具体工厂类中,实现抽象工厂类定义的工厂方法。示例代码如下:
```
// 抽象产品类
interface Product {
void use();
}
// 具体产品类
class ConcreteProductA implements Product {
public void use() {
System.out.println("Product A");
}
}
class ConcreteProductB implements Product {
public void use() {
System.out.println("Product B");
}
}
// 抽象工厂类
abstract class AbstractFactory {
public abstract Product createProduct();
}
// 具体工厂类
class ConcreteFactoryA extends AbstractFactory {
public Product createProduct() {
return new ConcreteProductA();
}
}
class ConcreteFactoryB extends AbstractFactory {
public Product createProduct() {
return new ConcreteProductB();
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
AbstractFactory factory = new ConcreteFactoryA();
Product product = factory.createProduct();
product.use();
}
}
```
三、抽象工厂模式
抽象工厂模式是针对工厂方法模式的一种优化,它通过引入抽象工厂类和抽象产品类,将产品的创建推迟到具体工厂中实现。当需要创建一组相关的产品时,抽象工厂可以一次创建出这一组产品。
抽象工厂模式的实现方式如下。首先,定义一个抽象产品类接口和一个抽象工厂类接口,接着创建产品族的具体实现类和工厂族的具体实现类,每个工厂中可以创建不同的一组产品。示例代码如下:
```
// 抽象产品类
interface ProductA {
void use();
}
interface ProductB {
void eat();
}
// 具体产品类
class ConcreteProductA1 implements ProductA {
public void use() {
System.out.println("Product A1");
}
}
class ConcreteProductA2 implements ProductA {
public void use() {
System.out.println("Product A2");
}
}
class ConcreteProductB1 implements ProductB {
public void eat() {
System.out.println("Product B1");
}
}
class ConcreteProductB2 implements ProductB {
public void eat() {
System.out.println("Product B2");
}
}
// 抽象工厂类
interface AbstractFactory {
ProductA createProductA();
ProductB createProductB();
}
// 具体工厂类
class ConcreteFactory1 implements AbstractFactory {
public ProductA createProductA() {
return new ConcreteProductA1();
}
public ProductB createProductB() {
return new ConcreteProductB1();
}
}
class ConcreteFactory2 implements AbstractFactory {
public ProductA createProductA() {
return new ConcreteProductA2();
}
public ProductB createProductB() {
return new ConcreteProductB2();
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
AbstractFactory factory = new ConcreteFactory1();
ProductA productA = factory.createProductA();
ProductB productB = factory.createProductB();
productA.use();
productB.eat();
}
}
```
综上所述,工厂模式的实现方式主要包括简单工厂模式、工厂方法模式和抽象工厂模式。不同的实现方式可以适用于不同的需求场景,开发人员可以根据具体情况选择合适的工厂模式。
扫码咨询 领取资料