1.简单工厂模式(Factory)
应用场景:又叫做静态工厂方法(StaticFactory Method)模式,但不属于 23 种设计模式之一。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品。Spring 中的 BeanFactory 就是简单工厂模式的体现,根据传入一个唯一的标识来获得 Bean 对象,但是类否是在传入参数后创建还是传入参数前创建这个要根据具体情况来
体现在代码就是:我有工厂类 (里面有getMilk方法,通过判断参数返回不同牛奶对象),牛奶接口,蒙牛类,伊利类,特仑苏类实现牛奶接口,测试main方法也就是顾客,main方法可通过工厂类的生产方法,传递一个参数,可以来获得某种牛奶对象
也就是 Milk mn = new Factory().getMilk("蒙牛");
2.工厂方法模式(Factory Method)
应用场景:通常由应用程序直接使用 new 创建新的对象,为了将对象的创建和使用相分离,采用工厂模
式,即应用程序将对象的创建及初始化职责交给工厂对象。
一般情况下,应用程序有自己的工厂对象来创建 Bean.如果将应用程序自己的工厂对象交给 Spring 管
理,那么 Spring 管理的就不是普通的 Bean,而是工厂 Bean体现在代码就是:
后面逐渐演变,分工细化,体现在代码就是:我有工厂接口,里面有生产牛奶的方法,然后有蒙牛工厂类,伊利工厂类,特仑苏工厂类,都实现工厂接口,重写方法里返回值分别为,蒙牛牛奶,伊利牛奶,特仑苏牛奶。还是有牛奶接口,蒙牛类,伊利类,特仑苏类,测试main方法也就是顾客,当需要蒙牛时创建蒙牛工厂对象来获得蒙牛牛奶Factory fac = new MengNiuFactory();
Milk mengNiu = fac.getMilk();
3.抽象工厂方法模式(Abstract Factory Method)
上面是蒙牛工厂生产蒙牛牛奶,但是对于用户来说,你什么工厂不关我的事,我需要蒙牛牛奶的时候还要去找蒙牛工厂,太麻烦。我只想找一个工厂,这个工厂什么牛奶都有,我需要蒙牛时你给我蒙牛,需要伊利时给我伊利就行了,所以就有了目前最复杂工厂模式,抽象工厂模式,spring里面就用了
代码总览如下(具体代码往下翻)
Milk接口
蒙牛牛奶类
伊利牛奶类
抽象工厂类,
牛奶工厂类
蒙牛工厂类
伊利工厂类
测试类(是不是看到了抽象工厂类带来的好处,它对扩展开放,对修改关闭,当我用户想要喝三鹿的时候只需要修改调用方法为getSanLu即可)