前提
工厂方法模式顾名思义就很容易理解,就不作多说了。
介绍
工厂方法的定义为:定义一个创建对象的接口,让子类决定实例化哪个类,工厂方法使一个类的实例化延迟到其子类。
仔细看上图,发现和建造者模式的图很相像,唯一的不同点就是多了Product
抽象类,其它的也就名字不一样,这是为什么呢?
打个很通俗的比喻,建造者模式类似私人定制,特点是量少,精致,工厂方法模式类似工厂生产,特点是量大,通用。就因为工厂方法生产的东西量多,量多必然是通用的东西,通用的东西必然应该抽象出来,以满足依赖倒转原则,开放封闭原则,这样就不难理解上面的Product
抽象类了。
使用方式
网上有人总结出工厂方法模式使用种类:
- 普通工厂方法
- 简单工厂方法
- 多工厂方法
- 替换单例模式
多工厂方法只是实例化多个工厂抽象类而已,太简单不作讲解。替换单例模式个人觉得没有必要,既然有单例模式干嘛还要井水犯河水,这个也不作讲解。
普通工厂模式
abstract public class Product {
abstract public void doSomething();
}
public class ConcreteProduct extends Product {
public void doSomething()
{
System.out.println("Product doSomething()");
}
}
abstract public class Factory {
abstract public Product createProduct();
}
public class ConcreteFactory extends Factory {
@Override
public Product createProduct() {
return new ConcreteProduct();
}
}
public class Main {
public static void main(String[] args) throws Exception {
Factory factory = new ConcreteFactory();
Product product = factory.createProduct();
product.doSomething();
}
}
以上就是个完整的使用例子,是不是和上节建造者模式差不多?大家只要记住使用场景不一样就OK了。
简单工厂模式
abstract public class Product {
abstract public void doSomething();
}
public class ConcreteProduct extends Product {
public void doSomething()
{
System.out.println("Product doSomething()");
}
}
public class SimpleFactory {
public static Product createProduct() {
return new ConcreteProduct();
}
}
public class Main {
public static void main(String[] args) throws Exception {
Product product = SimpleFactory.createProduct();
product.doSomething();
}
}
比上面那种简单粗暴易用,看了很多大神代码,这种使用方式也还是很多的,时间就是金钱^_^