简单工厂模式、工厂模式和抽象工厂模式是面向对象程序设计中的三种设计模式。它们都属于创建型模式,主要用于创建对象。虽然这三种模式都有创建对象的功能,但它们的实现方式和使用场景又是不同的,本文将从多个角度进行分析。
一、定义
1. 简单工厂模式
简单工厂模式也称为静态工厂模式,它是由一个简单的工厂对象根据不同的参数来创建不同的产品。简单工厂模式属于类创建型模式。
2. 工厂模式
工厂模式又称为工厂方法模式,它是定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。工厂模式属于类创建型模式。
3. 抽象工厂模式
抽象工厂模式是一种工厂模式的扩展,它提供一种创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类。抽象工厂模式属于对象创建型模式。
二、实现
1. 简单工厂模式
简单工厂模式由一个工厂类根据传入的参数,动态决定应该创建哪一个具体产品类的实例。这个工厂类一般是一个具有静态属性和静态方法的类,不需要实例化。
具体实现代码如下:
```
public class SimpleFactory {
public static Product createProduct(String type) {
if ("A".equals(type)) {
return new ConcreteProductA();
} else if ("B".equals(type)) {
return new ConcreteProductB();
} else {
return null;
}
}
}
```
2. 工厂模式
工厂模式把具体的实现类的创建延迟到子类中实现。它定义一个用于创建对象的接口,让子类决定实例化哪一个类。
具体实现代码如下:
```
public abstract class Factory {
public abstract Product createProduct();
}
public class ConcreteFactoryA extends Factory {
@Override
public Product createProduct() {
return new ConcreteProductA();
}
}
public class ConcreteFactoryB extends Factory {
@Override
public Product createProduct() {
return new ConcreteProductB();
}
}
```
3. 抽象工厂模式
抽象工厂模式是在工厂模式基础上扩展的一种模式,它提供一种创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类。
具体实现代码如下:
```
public interface AbstractFactory {
ProductA createProductA();
ProductB createProductB();
}
public class ConcreteFactory1 implements AbstractFactory {
@Override
public ProductA createProductA() {
return new ConcreteProductA1();
}
@Override
public ProductB createProductB() {
return new ConcreteProductB1();
}
}
public class ConcreteFactory2 implements AbstractFactory {
@Override
public ProductA createProductA() {
return new ConcreteProductA2();
}
@Override
public ProductB createProductB() {
return new ConcreteProductB2();
}
}
```
三、应用场景
1. 简单工厂模式
当客户端需要创建的对象较少时,可以使用简单工厂模式。但简单工厂模式违反了“开放封闭”原则,每次添加新的产品类时都需要修改工厂类的代码。
2. 工厂模式
工厂模式是将实例化对象的工作转交给子类完成,例如在 Spring 框架中,BeanFactory 采用了工厂模式。工厂模式可以实现“开放封闭”原则,但是由于每次创建对象都需要先实例化工厂类,因此导致系统的复杂度增加。
3. 抽象工厂模式
抽象工厂模式是在工厂方法模式的基础上扩展了一些功能。当需要创建复杂对象时,可以使用抽象工厂模式。抽象工厂模式可以实现“开放封闭”原则,但是由于增加了新的抽象层,因此会导致系统的复杂度增加。
四、对比分析
1. 简单工厂模式
简单工厂模式实现简单,但是违反了“开放封闭”原则,每次添加新的产品类时都需要修改工厂类的代码。
2. 工厂模式
工厂模式可以实现“开放封闭”原则,但是每次创建对象都需要先实例化工厂类,导致系统的复杂度增加。
3. 抽象工厂模式
抽象工厂模式可以创建一系列相关或互相依赖的对象,并且可以实现“开放封闭”原则。但是由于增加了新的抽象层,会导致系统的复杂度增加。
五、摘要和
【关键词】本文分析了简单工厂模式、工厂模式和抽象工厂模式的定义、实现和应用场景。通过对比分析,我们可以看出这三种模式的优缺点。本文将三种模式的优缺点进行概括,提供一种选择模式的参考。
扫码咨询 领取资料