工厂模式

2020-03-01  本文已影响0人  jianshujoker

工厂模式是用来创建对象的,当我们创建的对象比较简单时,我们大可以直接new一个;但当创建的对象比较复杂时,或涉及大量重复代码时,就可以使用工厂模式来创建对象了;下面以电器产品为例,看下三种工厂模式的异同

简单工厂模式

工厂对象决定创建哪个对象实例,不属于GOF的23种设计模式

public class SimpleFactory {
    /**
     * @param firm 厂商
     * @return 空调产品
     */
    IAirConditioner getAirConditioner(String firm) {
        if ("changhong".equalsIgnoreCase(firm)) {
            return new ChangHongAirConditioner();
        } else if ("meidi".equalsIgnoreCase(firm)) {
            return new MeiDiAirConditioner();
        } else {
            return null;
        }
    }
}

当我们想要获得一个空调产品时,我们只需要调用getAirConditioner就能得到产品,而无需关注创建过程,它的类图


简单工厂.png

工厂方法模式

定义一个创建对象的接口,让实现接口的子类来创建对象

public interface IFactory {
    IAirConditioner create();
}

public class ChangHongAirConditionerFactory implements IFactory {
    @Override
    public IAirConditioner create() {
        return new ChangHongAirConditioner();
    }
}

public class MeiDiAirConditionerFactory implements IFactory {
    @Override
    public IAirConditioner create() {
        return new MeiDiAirConditioner();
    }
}
工厂方法.png

抽象工厂模式

提供创建一系列相关或相互依赖产品(它们都有一个共有属性,比如这里的电器都是属于同一个厂商)的接口,不指定具体的类

public abstract class AbstractElectricFactory {
    public abstract IAirConditioner createAirConditioner();

    public abstract ITv createTV();
}

public class ChangHongElectricFactory extends AbstractElectricFactory {
    @Override
    public IAirConditioner createAirConditioner() {
        return new  ChangHongAirConditioner();
    }

    @Override
    public ITv createTV() {
        return new ChangHongTV();
    }
}

public class MeiDiElectricFactory extends AbstractElectricFactory {
    @Override
    public IAirConditioner createAirConditioner() {
        return new MeiDiAirConditioner();
    }

    @Override
    public ITv createTV() {
        return new MeiDiTV();
    }
}

类图


抽象工厂.png
上一篇下一篇

猜你喜欢

热点阅读