简单工厂模式
我们假设一个场景,小明肚子饿了,要订一个披萨。可能会订 必胜客 ,也可能点达美乐,又或者,还可能是 棒约翰 。于是我们可以设计这样一个方法,根据不同的type返回不同的披萨
但是假设用户想点的披萨品牌增加了,那么这块的代码也要发生相应的变化,我们可以将这里面的方法抽出来放到一个专门的类里,达到更好的复用,同时对用户变得透明,不用关心内在的逻辑
没错,其实简单工厂模式比起设计模式,更像是一个编程习惯。好处就是将代码复用了,如果有多个客户需要变更type,只要在工厂中进行修改就行
工厂方法
简单工厂虽然将逻辑抽取了出来,但是一旦有额外的披萨品牌加入,都需要更改其中的代码,这不符合开闭原则,因此就诞生了工厂方法,将更改代码变成增加一个工厂类
如此就能将工厂 抽象 了出来,新增披萨品牌只需要增加对应的工厂即可
抽象工厂
我们可以看到现在支持多个品牌的披萨,但是如果说现在披萨的品类需要细分呢,于是就要用到 抽象工厂模式 ,支持单个基础品类的披萨扩展为芝士披萨,蔬菜披萨等等
各位是不是发现抽象工厂和工厂方法有点类似,是的,抽象工厂的方法经常以工厂方法的方式实现。抽象工厂的任务是顶一个一个负责创建一组产品的接口。这个接口内的每个方法都负责创建一个具体的产品,同时我们利用实现抽象工厂的子类来提供这些具体的做法。所以抽象工厂中利用工厂方法实现生产是相当自然的做法