工厂模式

GOF概括:定义一个用于创建对象的接口,让子类决定实例化哪一个类。

工厂模式

这种代码结构,在项目中非常常见的,很可能不知不觉中,你一直在使用。
比如说:springboot 项目, 既能使用 hibernate,又能使用 mybatis,只需要改 yml 中的配置即可。
如果我们以后写代码,想做这种功能,就可以使用这个代码结构。

interface Product{}

class Button implements Product{}

class Factory{
    Product create(String type){
        if (type.equals("button")){
            return new Button();
        } else {
            throw new IllegalArgumentException("unknown product!");
        }
    }
}

抽象工厂

上面这个代码存在一定问题,我们仍然用 springboot 这个例子,

既能使用 hibernate,又能使用 mybatis,如果真的采用上面这种方式实现,会发生什么情况?
这个 Factory 对象要 import 各种各样的依赖,既有 hibernate 的又有 mybatis 的,乱糟糟一团,这显然不是我们想看到的。

想办法优化一下,用抽象工厂模式,把 Factory 类做成 interface;
这样我们就可以 hibernate 一个 Factory,mybatis 一个 Factory,各自管各自的,就很完美。

interface Product{}

class Button implements Product{}

interface Factory{
    Product create(String config);
}

class FactoryA implements Factory{
    public Product create(String config){
        if (config.equals("button")){
            return new Button();
        } else {
            throw new IllegalArgumentException("unknown product!");
        }
    }
}

posted on 2016-10-29 11:46  疯狂的妞妞  阅读(94)  评论(0编辑  收藏  举报

导航