为了解决什么问题?
简单工厂模式旨在解决对象创建的直接耦合依赖问题,它通过封装创建对象的代码来减少客户端与具体产品类之间的耦合。在简单工厂模式中,一个工厂类根据传入的参数决定创建哪一个具体产品类的实例。
怎么用代码实现?
Java代码示例:
interface Product {
/**
* 打印信息
*/
void print();
}
class ConcreteProductA implements Product {
@Override
public void print() {
System.out.println("Using Product A");
}
}
class ConcreteProductB implements Product {
@Override
public void print() {
System.out.println("Using Product B");
}
}
public class SimpleFactory {
public Product createProduct(String type) {
if ("A".equals(type)) {
return new ConcreteProductA();
} else if ("B".equals(type)) {
return new ConcreteProductB();
}
return null;
}
}
/**
* 客户端代码
*/
class Client {
public static void main(String[] args) {
SimpleFactory factory = new SimpleFactory();
Product product = factory.createProduct("A");
product.print();
}
}
为什么可以解决这个问题?
简单工厂模式通过封装对象的创建细节来解决创建对象时的耦合问题。客户端仅需要知道所需产品类型的参数,而不需要知道具体的产品类,从而简化了客户端的实现。当需要增加新产品时,只需在工厂类中添加新的创建逻辑,无需修改客户端代码。
简单工厂模式的使用场景
用于根据不同参数创建不同类实例的场景:当有多个类对应于多个可能发生的情况(如不同的配置选项或用户输入)时,简单工厂可以根据输入来决定返回哪个类的实例。
替换大量的构造函数调用:当创建对象需要复杂的设置过程或使用多个步骤时,可以在工厂中封装这些逻辑,简化客户端代码。
Java Servlet API:在Servlet中,javax.servlet.ServletFactory负责根据request对象的不同来创建不同的Servlet对象。
Apache Commons Codec:该库中的Factory类通常用于创建不同的编解码器(Encoder或Decoder),具体创建哪一个取决于传递给工厂的参数。
简单工厂模式通常用于应用程序内部对象的创建逻辑中,而不是作为库或框架的一部分。简单工厂模式实现起来简单易懂,适合在对象创建逻辑相对固定,且不会频繁变动的情况下使用。使用时需要注意,随着产品类型的增加,工厂类可能会变得臃肿,难以维护,这时候可以考虑使用更复杂的设计模式,如工厂方法模式或抽象工厂模式,来提供更灵活的对象创建机制。
———————————这是分割线———————————
欢迎添加博主vx深入交流: