希赛考试网
首页 > 软考 > 软件设计师

简单工厂模式与工厂方法模式

希赛网 2024-06-15 12:34:35

软件设计模式是为解决软件开发中复杂性的困境而产生的有用技巧。其中,工厂模式是一种常见的设计模式,用于将对象的创建与使用分离,从而提高代码的高效性、可拓展性和可维护性。在工厂模式中,常见的两种设计模式是简单工厂模式和工厂方法模式。

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. 综述

简单工厂模式和工厂方法模式都是常用的设计模式,两种模式都适用于大规模对象的创建,可以有效地提高代码质量、可维护性和可拓展性。相比之下,工厂方法模式更加灵活和可扩展,但需要额外的代码和调用开销。设计者应该根据自己的业务需求和代码架构来选择适用的模式。

扫码咨询 领取资料


软考.png


软件设计师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
软件设计师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考资格查询系统

扫一扫,自助查询报考条件