其他分享
首页 > 其他分享> > 设计模式之工厂模式 - 工厂方法模式

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

作者:互联网

一、简介

按照前面讲解的简单工厂模式,假如随着需求不断变化,系统需要优化,想将宝马汽车、奔驰汽车等不同品牌的汽车分开生产,可能后面会扩展不同品牌不同厂家这种情况。针对这种情况,我们可以使用工厂方法模式创建不同品牌汽车的工厂,这样的话,他们之间互不影响。后面如果想扩展其他品牌的话,也无需改动旧代码,直接添加多一个工厂实现类即可。

二、工厂方法模式

相关类图如下:

通过类图可以看到,工厂方法模式有四个要素:

具体代码实现如下:

 【a】ICar汽车接口

/**
 * @Description: ICar汽车接口
 * @author: weixiaohuai
 * @Date: 2019/10/19 20:49
 */
public interface ICar {

    /**
     * 生产汽车
     */
    void productCar();

}

【b】BmwCar宝马汽车类

/**
 * @Description: BmwCar宝马汽车类
 * @author: weixiaohuai
 * @Date: 2019/10/19 20:49
 */
public class BmwCar implements ICar {
    @Override
    public void productCar() {
        System.out.println("生产宝马汽车...");
    }
}

【c】BenzCar奔驰汽车类

/**
 * @Description: BenzCar奔驰汽车类
 * @author: weixiaohuai
 * @Date: 2019/10/19 20:49
 */
public class BenzCar implements ICar {
    @Override
    public void productCar() {
        System.out.println("生产奔驰汽车...");
    }
}

【d】抽象工厂抽象接口

/**
 * @Description: 工厂抽象接口
 * @author: weixiaohuai
 * @Date: 2019/10/19 20:49
 */
public abstract class ICarFactory {

    /**
     * 创建产品方法
     *
     * @return ICar
     */
    abstract ICar createCar();

}

【e】宝马汽车工厂具体实现类

public class BmwCarFactory extends ICarFactory {

    @Override
    ICar createCar() {
        return new BmwCar();
    }
}

【f】奔驰汽车工厂具体实现类

public class BenzCarFactory extends ICarFactory {

    @Override
    ICar createCar() {
        return new BenzCar();
    }
}

【g】客户端

public class Client {
    public static void main(String[] args) {
       ICarFactory bmwCarFactory = new BmwCarFactory();
       bmwCarFactory.createCar().productCar();

        ICarFactory benzCarFactory = new BenzCarFactory();
        benzCarFactory.createCar().productCar();
    }
}

【h】运行结果

可见,各种类的汽车产品之间生产互不影响,耦合度降低。假如后期还想生产别的种类的汽车,那么只需要增加多一个对应的工厂实现即可,可见扩展性还是维护性都比简单工厂提高了不少。

三、总结

标签:ICar,接口,工厂,汽车,模式,产品,设计模式,public
来源: https://blog.csdn.net/Weixiaohuai/article/details/102722412