在软件工程中,工厂模式是一种创建型设计模式,其定义为定义一个用于创建对象的接口,让子类决定实例化哪个类。此模式与抽象工厂模式和工厂方法模式的区别是,简单工厂模式只允许一个工厂类来创建所有类型的对象。
简单工厂模式的实现主要包括三个角色:
1. 工厂类,负责创建所有类型的对象;
2. 抽象产品类,定义了所有具体产品类实现的接口;
3. 具体产品类,实现抽象产品类接口,是工厂方法创建的对象。
下面是一个简单的Java代码示例:
```
public class SimpleFactory {
public static Product getProduct(String productType) {
if (productType == null) {
return null;
}
if (productType.equalsIgnoreCase("ProductA")) {
return new ProductA();
} else if (productType.equalsIgnoreCase("ProductB")) {
return new ProductB();
} else if (productType.equalsIgnoreCase("ProductC")) {
return new ProductC();
}
return null;
}
}
public interface Product {
void doSomething();
}
public class ProductA implements Product {
@Override
public void doSomething() {
System.out.println("ProductA doSomething()");
}
}
public class ProductB implements Product {
@Override
public void doSomething() {
System.out.println("ProductB doSomething()");
}
}
public class ProductC implements Product {
@Override
public void doSomething() {
System.out.println("ProductC doSomething()");
}
}
```
在上述示例代码中,SimpleFactory是工厂类,getProduct()方法用于创建不同类型的产品对象。Product是抽象产品类,定义所有具体产品类实现的接口。ProductA、ProductB和ProductC均是具体产品类,实现Product接口。
客户端可以通过调用SimpleFactory类的getProduct()方法获取不同类型的产品对象。例如:
```
Product productA = SimpleFactory.getProduct("ProductA");
productA.doSomething();
Product productB = SimpleFactory.getProduct("ProductB");
productB.doSomething();
Product productC = SimpleFactory.getProduct("ProductC");
productC.doSomething();
```
调用结果如下:
```
ProductA doSomething()
ProductB doSomething()
ProductC doSomething()
```
从多个角度来分析,简单工厂模式的优缺点如下:
优点:
1. 适合创建类数量较少的情况;
2. 可以隐藏对象创建的具体细节,客户端只需要知道所需产品的类型就可以获取对象;
3. 简单工厂模式实现简单,易于理解和维护。
缺点:
1. 工厂类的职责过重,如果新增产品类型,需要修改工厂类的代码,违反了开闭原则;
2. 由于工厂类是静态方法,不能被继承,扩展性受限;
3. 用简单工厂模式创建的对象通常没有抽象接口,使得扩展困难。
扫码咨询 领取资料