工厂方法模式

模式介绍

工厂方法模式,是为了解决简单工厂模式的不足之处,对简单工厂模式进行了升级。将生产产品的方法在接口中定义,由子类来具体实现生产哪一种产品。

业务场景

基于上一篇简单工厂模式的业务场景,在简单工厂模式下,是由SimpleCakeFactory来具体生产出不同的蛋糕实例。如果我们想新增一种肉松蛋糕,那么就需要修改SimpleCakeFactory的代码,这不仅违背了开闭原则,而且也不易扩展。那么在工厂模式下,我们将生产蛋糕产品定义成为一个抽象工厂,具体生产奶油蛋糕、芝士蛋糕等定义为具体的工厂。每次增加新口味的蛋糕,我们只需要新建一个类和创建该类的具体工厂即可。

代码实现

创建CakeFactory工厂,这个接口中只定义获得蛋糕产品的方法。

/**
 * 工厂方法模式
 */
public interface CakeFactory {

    CakeProduct getPruduct();
}

分别创建芝士蛋糕生产工厂、巧克力蛋糕生产工厂和奶油蛋糕生产工厂

/**
 * 芝士蛋糕生产工厂
 */
public class CheeseCakeFactory implements CakeFactory {

    @Override
    public CakeProduct getPruduct() {
        return new CheeseCakeProduct();
    }
}
/**
 * 巧克力蛋糕生产工厂
 */
public class ChocolateCakeFactory implements CakeFactory{

    @Override
    public CakeProduct getPruduct() {
        return new ChocolateCakeProduct();
    }
}
/**
 * 奶油蛋糕生产工厂
 */
public class CreamCakeFactory implements CakeFactory {

    @Override
    public CakeProduct getPruduct() {
        return new CreamCakeProduct();
    }
}

工厂方法模式使用

//创建奶油蛋糕生产厂
CreamCakeFactory creamCakeFactory = new CreamCakeFactory();
//通过奶油蛋糕厂生产奶油蛋糕实例
CakeProduct creamCake = creamCakeFactory.getPruduct();
creamCake.make();

//创建巧克力蛋糕生产厂
ChocolateCakeFactory chocolateCakeFactory = new ChocolateCakeFactory();
//通过巧克力蛋糕厂生产巧克力蛋糕实例
CakeProduct chocolateCake = chocolateCakeFactory.getPruduct();
chocolateCake.make();

总结

工厂方法模式,在简单工厂模式的基础上,对工厂类进行抽象,产生一个抽象工厂接口,将实际创建工作推迟到子类当中。在简单工厂模式下新引进的产品需要修改核心工厂,在工厂方法模式下不需要修改核心工厂,只需要新建一个类和创建该类的具体工厂,扩展性较强。

点击这里获取示例源码

你可能感兴趣的:(DesignPattern,设计模式,工厂方法模式)