设计模式之旅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 extends Product> T createProduct(Class<T> clz);

}

具体工厂类:

public class ConcreteFactory extends Factory {
    @Override
    public <T extends Product> T createProduct(Class<T> 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. 缺点

  • 随着产品种类的数量的增长,工厂类也会随之增加,将不利于系统的维护,增加系统编译和运行的开销。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 4,004评论 1 15
  • 简单工厂模式虽然简单,但存在一个很严重的问题。当系统中需要引入新产品时,由于静态工厂方法通过所传入参数的不同来创建...
    justCode_阅读 1,241评论 1 9
  • 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。通常我们所说的工厂模式是指工厂方法模...
    zfylin阅读 1,349评论 0 7
  • 每次狂欢玩,总是感觉到深深的失落。我不知道是自己太矫情了,还是红酒起了作用,一个人走在街上又冷又孤单。 Al...
    毒蘑菇凉阅读 219评论 0 0
  • 屠柒好歹读过大学,知道邛海在西昌那边,不禁奇道:“怎么隔那么远?”崔符解释说:“那恶鬼当年肆虐整个川地,从岷山一路...
    云侍阅读 456评论 3 4