设计模式之旅3--工厂方法模式

1. 定义

工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

设计模式之旅3--工厂方法模式_第1张图片
工厂方法模式

2. 使用场景

  • 复杂对象的生成,代替new的方式来屏蔽产品类的创建过程:需要一种产品,而不想知道也不需要知道工厂是如何生产出来的,只需要知道具体对应的工厂就行。
  • 产品的替换需要灵活、可扩展性高的场合。
  • 测试驱动开发的框架中,往往通过工厂方法把对象虚拟出来(用得比较少)。
  • Android中的Bitmap就是通过工厂方法来创建的。

3. 实现

抽象产品类:

public abstract class Product {

}

具体产品类:

public class ConcreteProduct1 extends Product {

}

public class ConcreteProduct2 extends Product {

}

抽象工厂类:

public abstract class Factory {

    public abstract  T createProduct(Class clz);

}

具体工厂类:

public class ConcreteFactory extends Factory {
    @Override
    public  T createProduct(Class clz) {
        Product product = null;
        try {
            product = (Product) Class.forName(clz.getName()).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return (T) product;
    }
}

场景类:

public class Client {

    public static void main(String[] args) {
        ConcreteFactory factory = new ConcreteFactory();
        factory.createProduct(ConcreteProduct1.class);
    }

}

4. 优点

  • 良好的封装性与解偶。利用工厂的工厂方法类去创建具体的产品对象,隐藏了具体产品对象的创建细节,只需要关心具体产品对应的具体工厂。高层模块只需要关心抽象产品类。
  • 遵守开闭原则,扩展性好。加入新的产品类时,只需要同时加入工厂类就可以实现扩展,无需修改原来的代码。

5. 缺点

  • 随着产品种类的数量的增长,工厂类也会随之增加,将不利于系统的维护,增加系统编译和运行的开销。

你可能感兴趣的:(设计模式之旅3--工厂方法模式)