工厂模式是一种常用的设计模式,它属于创建型模式,可以将对象的创建过程抽象出来,然后交给工厂类来完成,以达到解耦的目的。
工厂模式包括三种类型:简单工厂模式、工厂方法模式和抽象工厂模式。下面分别介绍其中两种模式并给出相应的代码示例:
- 简单工厂模式
简单工厂模式又称为静态工厂模式,它通过一个工厂类来创建不同的产品对象,用户只需要传入不同的参数即可得到所需的产品。以下是简单工厂模式的示例代码:
// 抽象产品接口
public interface Product {
void use();
}
// 具体产品实现类A
public class ConcreteProductA implements Product {
@Override
public void use() {
System.out.println("I am using product A.");
}
}
// 具体产品实现类B
public class ConcreteProductB implements Product {
@Override
public void use() {
System.out.println("I am using product B.");
}
}
// 工厂类
public class SimpleFactory {
public static Product createProduct(String type) {
if ("A".equals(type)) {
return new ConcreteProductA();
} else if ("B".equals(type)) {
return new ConcreteProductB();
}
return null;
}
}
// 测试代码
public class Test {
public static void main(String[] args) {
Product productA = SimpleFactory.createProduct("A");
productA.use();
Product productB = SimpleFactory.createProduct("B");
productB.use();
}
}
- 工厂方法模式
工厂方法模式又称为多态性工厂模式,它定义一个用于创建对象的接口,让子类决定实例化哪个类。与简单工厂相比,工厂方法模式不再提供一个统一的工厂类来创建所有产品,而是针对每种产品提供一个工厂类。以下是工厂方法模式的示例代码:
// 抽象产品接口
public interface Product {
void use();
}
// 具体产品实现类A
public class ConcreteProductA implements Product {
@Override
public void use() {
System.out.println("I am using product A.");
}
}
// 具体产品实现类B
public class ConcreteProductB implements Product {
@Override
public void use() {
System.out.println("I am using product B.");
}
}
// 抽象工厂接口
public interface Factory {
Product createProduct();
}
// 具体工厂A
public class ConcreteFactoryA implements Factory {
@Override
public Product createProduct() {
return new ConcreteProductA();
}
}
// 具体工厂B
public class ConcreteFactoryB implements Factory {
@Override
public Product createProduct() {
return new ConcreteProductB();
}
}
// 测试代码
public class Test {
public static void main(String[] args) {
Factory factoryA = new ConcreteFactoryA();
Product productA = factoryA.createProduct();
productA.use();
Factory factoryB = new ConcreteFactoryB();
Product productB = factoryB.createProduct();
productB.use();
}
}
以上是简单工厂模式和工厂方法模式的示例代码,它们可以帮助我们更好地理解工厂模式的实现方式以及它的作用。
工厂模式的主要作用是将对象的创建过程抽象出来,从而达到解耦的目的。它可以有效地降低代码的耦合度,使得产品的生成和使用相互独立,且易于进行单元测试和扩展。
常见的工厂模式应用场景包括:
- 对象的创建比较复杂,需要进行初始化、数据库连接等操作。
- 需要根据不同的条件创建不同类型的对象时。
- 希望用户只需关注业务部分,而非对象的创建和初始化过程。
- 通过面向接口编程,实现更好的可维护性、可扩展性和可测试性。
具体的场景包括但不限于以下几种:
- UI组件创建:如按钮、文本框、下拉框等控件创建,可以通过工厂方法来防止界面层和业务层之间的代码耦合。
- 数据库访问对象DAO创建:为了方便使用者开发数据库访问程序,可以提供一组数据库访问对象的工厂类,封装对象创建的细节,使得使用者不必直接操纵诸如new等关键字,避免因为实例化对象修改而带来的变动风险。
- 日志记录组件创建:当我们需要在项目中使用不同种类的日志框架或者不同方式记录日志时,可以通过工厂模式来实现对象的创建和初始化过程。
- 实现依赖注入:依赖注入是一种编程思想,它与工厂模式有很大关系。例如Spring框架中就大量使用了工厂模式,实现了面向接口编程和IOC/AOP等高级特性。
总之,当我们需要封装对象创建细节而又希望提供灵活性与可扩展性时,可以考虑使用工厂模式。