软件设计模式是为解决软件开发中复杂性的困境而产生的有用技巧。其中,工厂模式是一种常见的设计模式,用于将对象的创建与使用分离,从而提高代码的高效性、可拓展性和可维护性。在工厂模式中,常见的两种设计模式是简单工厂模式和工厂方法模式。
1. 简单工厂模式
简单工厂模式是一种直接定义一个工厂类来负责创建对象的模式。在该模式中,客户端只需要知道产品的接口即可,而不需要知道具体实现细节,工厂类负责创建具体产品的对象。简单工厂模式的重点是在工厂类上,通过静态方法来创建产品对象,如下:
```
public interface Product {
void show();
}
public class ConcreteProductA implements Product{
@Override
public void show() {
System.out.println("Product A created.");
}
}
public class ConcreteProductB implements Product{
@Override
public void show() {
System.out.println("Product B created.");
}
}
public class ProductFactory {
public static Product createProduct(String type) {
switch (type) {
case "A":
return new ConcreteProductA();
case "B":
return new ConcreteProductB();
default:
throw new IllegalArgumentException("Unknown product type.");
}
}
}
public class Client {
public static void main(String[] args) {
Product productA = ProductFactory.createProduct("A");
Product productB = ProductFactory.createProduct("B");
productA.show();
productB.show();
}
}
```
2. 工厂方法模式
工厂方法模式是一种定义一个用于创建对象的接口,让子类决定实例化哪一个类的模式。在该模式中,客户端需要创建一个针对工厂接口的具体实现类,用于创建具体的产品,如下:
```
public interface Product {
void show();
}
public class ConcreteProductA implements Product{
@Override
public void show() {
System.out.println("Product A created.");
}
}
public class ConcreteProductB implements Product{
@Override
public void show() {
System.out.println("Product B created.");
}
}
public interface ProductFactory {
Product createProduct();
}
public class ConcreteProductFactoryA implements ProductFactory {
@Override
public Product createProduct() {
return new ConcreteProductA();
}
}
public class ConcreteProductFactoryB implements ProductFactory {
@Override
public Product createProduct() {
return new ConcreteProductB();
}
}
public class Client {
public static void main(String[] args) {
ProductFactory factoryA = new ConcreteProductFactoryA();
ProductFactory factoryB = new ConcreteProductFactoryB();
Product productA = factoryA.createProduct();
Product productB = factoryB.createProduct();
productA.show();
productB.show();
}
}
```
3. 性能比较
首先,简单工厂模式通过工厂类来创建产品对象,可以有效地封装对象的创建过程,降低对客户端的依赖性,并且可以在工厂类中进行适当的优化。但是,缺点也很明显,工厂类负责创建的对象类型是固定的,当需要添加新类型的对象时,需要修改工厂类的代码,这违反了开放封闭原则。
与之相比,工厂方法模式是通过接口和实现类来实现对象的创建过程,即让抽象工厂在子类中具体实现。这种方式可以灵活地添加新的产品类型,符合开放封闭原则,但是需要额外的代码量和结构。此外,由于工厂方法需要先创建一个具体的工厂对象,再通过该对象来创建具体的产品对象,因此比简单工厂模式多了一次方法调用的开销,考虑到JVM的优化,这个过程的性能开销是微不足道的。
4. 综述
简单工厂模式和工厂方法模式都是常用的设计模式,两种模式都适用于大规模对象的创建,可以有效地提高代码质量、可维护性和可拓展性。相比之下,工厂方法模式更加灵活和可扩展,但需要额外的代码和调用开销。设计者应该根据自己的业务需求和代码架构来选择适用的模式。
扫码咨询 领取资料