1. 定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。
产品:
接口:public interface Product {
void show ();
}
产品1: class Product1 implements Product {
public void show() {
System.out.println("this is the product 1");
}
}
产品2: class Product1 implements Product {
public void show() {
System.out.println("this is the product 2");
}
}
产品工厂:
接口: public interface CreateFactory {
Product create();
}
产品1工厂:class Product1Factory implements CreateFactory{
@Override
public Product create() {
return new Product1();
}
}
产品2工厂:class Product2Factory implements CreateFactory {
@Override
public Product create() {
return new Product2();
}
}
使用:
public class Test {
public static void main(String[] args) {
CreateFactory p1f = new Product1Factory();
CreateFactory p2f = new Product2Factory();
p1f.create(); // 产品1工厂创建产品
p2f.create(); // 产品2工厂创建产品
}
}
优点:工厂模式可以说是简单工厂模式的进一步抽象和拓展,在保留了简单工厂的封装优点的同时,让扩展变得简单,让继承变得可行,增加了多态性的体现。
缺点:系统类的个数将成对增加, 增加系统编译开销。增加抽象层和理解难度,增加复杂度,一个工厂只能生产一种产品,当前产品需要更换的时候还是需要修改相应的代码。