美文网首页
设计模式之旅3--工厂方法模式

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

作者: 小楠总 | 来源:发表于2018-07-11 00:13 被阅读100次

    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. 缺点

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

    相关文章

      网友评论

          本文标题:设计模式之旅3--工厂方法模式

          本文链接:https://www.haomeiwen.com/subject/gsyruftx.html