在Java中,工厂模式是一种创建型设计模式,它提供了一种在不指定具体类的情况下创建对象的方法。工厂模式通常包括三种类型:简单工厂模式、工厂方法模式和抽象工厂模式。下面分别介绍它们的实现。
简单工厂模式是通过一个静态方法来创建对象,这个静态方法根据传入的参数决定实例化哪个类。但是,简单工厂模式并不符合开闭原则(对扩展开放,对修改关闭),因此不推荐使用。
public class SimpleFactory {
public static Product createProduct(String type) {
if (type == null) {
return null;
}
if (type.equalsIgnoreCase("A")) {
return new ProductA();
} else if (type.equalsIgnoreCase("B")) {
return new ProductB();
}
return null;
}
}
interface Product {
void use();
}
class ProductA implements Product {
@Override
public void use() {
System.out.println("Using Product A");
}
}
class ProductB implements Product {
@Override
public void use() {
System.out.println("Using Product B");
}
}
工厂方法模式是通过在抽象类中定义一个抽象方法来创建对象,子类通过实现这个抽象方法来创建具体的对象。这样,当需要添加新的产品类时,只需创建一个新的子类并实现工厂方法即可,无需修改原有代码。
abstract class Factory {
public abstract Product createProduct();
}
class ConcreteFactoryA extends Factory {
@Override
public Product createProduct() {
return new ProductA();
}
}
class ConcreteFactoryB extends Factory {
@Override
public Product createProduct() {
return new ProductB();
}
}
interface Product {
void use();
}
class ProductA implements Product {
@Override
public void use() {
System.out.println("Using Product A");
}
}
class ProductB implements Product {
@Override
public void use() {
System.out.println("Using Product B");
}
}
抽象工厂模式是通过定义一个抽象工厂接口来创建一系列相关或相互依赖的对象,而不需要指定它们具体的类。抽象工厂模式可以实现多重聚合,即一个工厂可以创建多种类型的产品。
abstract class AbstractFactory {
public abstract ProductA createProductA();
public abstract ProductB createProductB();
}
class ConcreteFactory implements AbstractFactory {
@Override
public ProductA createProductA() {
return new ProductA();
}
@Override
public ProductB createProductB() {
return new ProductB();
}
}
interface ProductA {
void use();
}
interface ProductB {
void use();
}
class ProductAImpl implements ProductA {
@Override
public void use() {
System.out.println("Using Product A");
}
}
class ProductBImpl implements ProductB {
@Override
public void use() {
System.out.println("Using Product B");
}
}
以上就是Java中实现工厂模式的几种方法。在实际开发中,可以根据需求选择合适的工厂模式。