六、抽象工厂模式

22 阅读1分钟

抽象工厂模式与工厂方法模式应用场景完全不同。工厂方法模式用于生产一种产品,而抽象工厂模式用于生产一个产品组。

场景:

有小米和华为两家公司,生产手机、汽车、路由器

定义手机接口

public interface Phone {

    void phoneName();
}

定义汽车接口

public interface Car {

    void carName();
}

定义路由器接口

public interface Route {

    void routeName();
}

创建小米手机类和华为手机类

public class XiaomiPhone implements Phone{
    @Override
    public void phoneName() {
        System.out.println("小米手机");
    }
}
public class HuaweiPhone implements Phone{
    @Override
    public void phoneName() {
        System.out.println("华为手机");
    }
}

创建小米汽车类和华为汽车类

public class XiaomiCar implements Car{
    @Override
    public void carName() {
        System.out.println("小米汽车");
    }
}
public class HuaweiCar implements Car{
    @Override
    public void carName() {
        System.out.println("华为汽车");
    }
}

创建小米路由器类和华为路由器类

public class XiaomiRoute implements Route{
    @Override
    public void routeName() {
        System.out.println("小米路由器");
    }
}
public class HuaweiRoute implements Route{
    @Override
    public void routeName() {
        System.out.println("华为路由器");
    }
}

定义工厂接口

public interface Factory {

    Phone createPhone();
    Car createCar();
    Route createRoute();
}

创建小米工厂类和华为工厂类

public class XiaomiFactory implements Factory{
    @Override
    public Phone createPhone() {
        return new XiaomiPhone();
    }

    @Override
    public Car createCar() {
        return new XiaomiCar();
    }

    @Override
    public Route createRoute() {
        return new XiaomiRoute();
    }
}
public class HuaweiFactory implements Factory{
    @Override
    public Phone createPhone() {
        return new HuaweiPhone();
    }

    @Override
    public Car createCar() {
        return new HuaweiCar();
    }

    @Override
    public Route createRoute() {
        return new HuaweiRoute();
    }
}

抽象工厂模式有点像是在工厂方法模式中的抽象工厂中增加了多个抽象方法。但是,一定要注意的是,抽象工厂模式新增的方法生产的产品一定是一个产品组的。