所谓工厂模式,就是将生产某些对象的工作,统一放到一个类中来完成,这个类就形象的叫做工厂,这种设计模式就叫做工厂模式。
比如一个鞋厂,生产鞋子,不管是男鞋、女鞋、童鞋,还是各种尺码、各种颜色的鞋子,都是从鞋厂生产的,我们在代码上,也是如此,将一系列产品交给一个类建造出来,就像是放到一个工厂里,统一建造,输出,这就是工厂模式了。
工厂模式也分多种,我们常见的分类方式分为:简单工厂、工厂方法和抽象工厂。
我们这一节主要来学习简单工厂,简单工厂也叫静态工厂,特点是所有生产逻辑都放在工厂中完成。
我们以不同果汁生产的例子来演示。
1、先定义一个果汁接口,规定所有果汁,统一的生产方式
package com.itzhimei.study.design.factory.simple;
/**
* www.itzhimei.com
* 果汁接口
*/
public interface IFruitsJuice {
/**
* 定义果汁方法
* @return
*/
String getFruitsJuice();
}
2、定义苹果汁
package com.itzhimei.study.design.factory.simple;
/**
* www.itzhimei.com
* 苹果汁
*/
public class AppleJuice implements IFruitsJuice {
@Override
public String getFruitsJuice() {
return "苹果汁";
}
}
3、定义橙汁
package com.itzhimei.study.design.factory.simple;
/**
* www.itzhimei.com
* 橙汁
*/
public class OrangeJuice implements IFruitsJuice {
@Override
public String getFruitsJuice() {
return "橙汁";
}
}
4、下来来是最重要的工厂类了
package com.itzhimei.study.design.factory.simple;
/**
* www.itzhimei.com
* 果汁工厂
*/
public class FruitsJuiceFactory {
/**
* 负责生产指定口味的果汁
* @param type
* @return
*/
public static IFruitsJuice getFruitsJuice(int type) {
if(type ==1) {
return new AppleJuice();
} if(type ==2) {
return new OrangeJuice();
}
return null;
}
}
生产哪种类型的果汁,就是在工厂中通过传入参数来判断生产的。
5、测试类
package com.itzhimei.study.design.factory.simple;
/**
* www.itzhimei.com
* 测试
*/
public class Client {
public static void main(String[] args) {
IFruitsJuice apple = FruitsJuiceFactory.getFruitsJuice(1);
IFruitsJuice orange = FruitsJuiceFactory.getFruitsJuice(2);
System.out.println(apple.getFruitsJuice());
System.out.println(orange.getFruitsJuice());
}
}
输出结果:
苹果汁
橙汁
类关系图:
简单工厂本身学习起来也是非常简单的,动手写一写吧。