工厂模式是一种常用的设计模式,它可以将对象的创建和使用相分离,从而降低系统耦合度,提高系统的可扩展性。Java中工厂模式有三种实现方式:简单工厂模式、工厂方法模式和抽象工厂模式。
简单工厂模式
简单工厂模式,也叫静态工厂方法模式,是由一个工厂对象决定创建出哪一种产品类的实例。客户端只需要传入工厂类的参数,无需关心如何创建对象的细节。具体实现如下:
public class SimpleFactory {
public static Product createProduct(String type) {
if (type.equals("A")) {
return new ProductA();
} else if (type.equals("B")) {
return new ProductB();
} else {
return null;
}
}
}
public interface Product {
void use();
}
public class ProductA implements Product {
@Override
public void use() {
System.out.println("ProductA is used");
}
}
public class ProductB implements Product {
@Override
public void use() {
System.out.println("ProductB is used");
}
}
// 客户端代码
Product product = SimpleFactory.createProduct("A");
product.use();
工厂方法模式
工厂方法模式,也叫多态性工厂模式,是定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法模式是将对象的实例化延迟到其子类中进行,从而实现解耦。具体实现如下:
public interface Factory {
Product createProduct();
}
public class FactoryA implements Factory {
@Override
public Product createProduct() {
return new ProductA();
}
}
public class FactoryB implements Factory {
@Override
public Product createProduct() {
return new ProductB();
}
}
// 客户端代码
Factory factory = new FactoryA();
Product product = factory.createProduct();
product.use();
抽象工厂模式
抽象工厂模式是指提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。具体实现如下:
public interface AbstractFactory {
Product createProduct();
AnotherProduct createAnotherProduct();
}
public class ConcreteFactory implements AbstractFactory {
@Override
public Product createProduct() {
return new ProductA();
}
@Override
public AnotherProduct createAnotherProduct() {
return new AnotherProductA();
}
}
public interface AnotherProduct {
void use();
}
public class AnotherProductA implements AnotherProduct {
@Override
public void use() {
System.out.println("AnotherProductA is used");
}
}
// 客户端代码
AbstractFactory factory = new ConcreteFactory();
Product product = factory.createProduct();
AnotherProduct anotherProduct = factory.createAnotherProduct();
product.use();
anotherProduct.use();
以上是Java中工厂模式的三种实现方式,开发者根据具体需求选择不同的实现方式即可。