工厂方法模式由简单工厂模式进化而来,我们先说简单工厂模式。
工厂,顾名思义生产产品,根据客户的需要,生产对应的产品。对应到 java 代码:根据不同的参数,返回不同类型的对象。并且工厂一般只生产一类产品,饮品工厂不能生产衣服一个道理。java 工厂也只能生产一类对象,即包含公共父类:
public class SimpleFactory {
public interface Product {
}
public static class ProductA implements Product {
public ProductA() {
System.out.println("ProductA - 生产完成");
}
}
public static class ProductB implements Product {
public ProductB() {
System.out.println("ProductB - 生产完成");
}
}
static final class Const {
static final int ProductA = 1;
static final int ProductB = 2;
}
public static class Factory {
public static Product createProduct(int type) {
switch (type) {
case Const.ProductA:
return new ProductA();
case Const.ProductB:
return new ProductB();
}
return null;
}
}
}
以上就是简单工厂模式的实现,代码非常简单。然而包含以下缺陷:所有产品都在一个工厂中生产。为了解决该问题,不仅对产品抽象,对工厂也抽象,将不同的产品放到不同的工厂中初始化,这就是工厂方法模式:
public class FactoryMethod {
public static void main(String[] args) {
Factory factory1 = new FactoryA();
factory1.createProduct();
Factory factory2 = new FactoryB();
factory2.createProduct();
}
public interface Product {
}
public static class ProductA implements Product {
public ProductA() {
System.out.println("ProductA - 生产完成");
}
}
public static class ProductB implements Product {
public ProductB() {
System.out.println("ProductB - 生产完成");
}
}
public interface Factory {
public Product createProduct();
}
public static class FactoryA implements Factory {
@Override
public Product createProduct() {
return new ProductA();
}
}
public static class FactoryB implements Factory {
@Override
public Product createProduct() {
return new ProductB();
}
}
}
以上就是工厂方法模式的实现,新增了工厂抽象,不同产品在不同工厂初始化,符合低耦合、高内聚