设计模式—工厂方法模式

298 阅读3分钟

这是我参与新手入门的第1篇文章,欢迎大家多多交流指正

概念

工厂模式用来封装对象的创建,该模式中通常会有多个创建者(工厂)类和多个产品类。父类工厂会包括一个创建产品的方法,通过让继承的子类工厂决定创建具体的产品对象,达到对象创建过程封装的目的。

  1. 何时使用工厂方法:模式关心产品而不关心产品具体是如何生成的,隐藏复杂对象的生成过程。
  2. 使用工厂方法的好处:有多个复杂对象产品,新增产品的时候只需增加对应的产品以及相应的工厂。

举例

假设你回到家乡开了一家蛋糕店,请了两位面点师傅。结果有一位临近开业突然反悔不来了。

由于第一次做生意,经验不足,加上想法稍微与常人有异,你觉得,做事必须要讲究两个字"大气",所以一口气租了半层的中心商铺,非常的有排面。加上机器,原料,人工。。。一开始启动资金就挥霍的差不多了,可以说是完全没有考虑之后的事情。

但是没有关系。

因为就在这个时候,你请的另一位师傅过来跟你说,他只会做纯蛋糕,毕竟现在只会做一种蛋糕的面点师在无数的面点师傅中完全没有亮点。所以他在简历中也就写稍微夸张了那么亿点点。但他保证自己做的纯蛋糕非常的好吃,绝对独一份。

听到这,你虽然当场就想要夸他是个小可爱,但考虑到离开业时间已经很近了, 传单广告什么的已经宣传出去,再加上你自己又是个说一不二的人,所以现在开始做蛋糕,让店开下去才是首要的,不然多年的积蓄都打了水漂了。

好的,现在让我们来做蛋糕:

蛋糕店

public abstract class CakeFactory {

	public abstract Cake make();
}

半层商铺纯蛋糕小作坊

public class PlainCakeFactory extends CakeFactory {

	@Override
    	public Cake make() {
            System.out.println("纯蛋糕制作中");
	}
}

蛋糕接口

public interface Cake {}

纯蛋糕

public class Plain implements Cake{
    void bake() {
        System.out.println("纯蛋糕烘培秘籍");
    }
}

第一批纯蛋糕制作出来了,你尝了一下,味道还不错,面点师傅在这一点上倒是没有说谎。

。。。

很快就到了开业当天。意外的是当天来了不少的顾客,也许是出于好奇?也许想看看是哪位大聪明盘了这么大的店面,还只卖纯蛋糕?总之第一步还是顺利跨出去了。

但是只卖纯蛋糕,靠着这种噱头,店还是开不长久的,所以必须要着手开始市场调研,生产其他类型的蛋糕了。

之前为了应急,所有的设备场地都是围绕着制作纯蛋糕去的。总不能为了制作新的蛋糕,将之前的装修全都推翻了。

机智的你早就知道灵活拓展的重要性。

让我们来看看类图,了解工厂模式大致的组成结构:

leitu.png

这样每次添加新的类型的蛋糕就不需要大动干戈了。

但是很快,新的问题又随之而来,蛋糕店又有什么新的挑战呢?

让我们在下一篇抽象工厂模式中再谈吧。

未完待续。。。