什么是工厂
理解简单工厂设计模式, 首先要理解什么是工厂. 我们身边有很多工厂. 酿酒的酒厂, 制衣的衣厂, 加工肉类的肉加工厂等等. 这些工厂他们到底是怎么酿酒的? 怎么制衣的?怎么加工肉的? 我们并不知道, 也不需要知道. 不知道并不影响我们喝酒, 穿衣, 吃肉. 这就是工厂的特点之一: 客户不需要知道怎么做的, 但是不影响使用
再来看看工厂的第二个特点: 比如肉加工厂—双汇. 牛肉进去出来牛肉火腿肠, 羊肉进去出来羊肉火腿肠, 猪肉进去出来猪肉火腿肠. 我不需要知道怎么加工的, 我只需要把材料扔进去, 然后对应的火腿肠就出来了. 这就是第二个特点: 给你材料, 你去制造出我想要的东西, 至于怎么做, 我并不关心
程序中的工厂也是一样的思想. **工厂的作用就是创造对象. **
简单工厂设计模式
简单工厂设计模式, 又叫做静态工厂设计模式. 简单工厂设计模式提供一个创建对象实例的功能,而无需关系其具体实现,被创建实例的类型可以是接口、抽象类,也可以是具体的类
四要素
这个很重要, 这也是创建一个简单工厂的步骤
-
API接口: 创建一个API接口或抽象类
-
Impl实现类: 一个或多个实现API接口/抽象类的类
-
工厂: 定义一个工厂, 用来创建API接口类对象
-
客户端: 用来调用工厂创建API接口或抽象类的客户端
简单工厂结构类型及说明
以上类型就描述了一个简单工厂创建的整个过程
第一步: 定义API接口或抽象类, 并定义一个operate操作方法
第二步: 定义API的实现类, 每个实现类单独实现operate方法
第三步: 定义工厂类. 工厂类依赖API接口和API的实现类, 简单工厂设计模式是创建型的, 通常是用来创建实体类. 因此我们定义一个create方法, 来创建实例对象,入参通常是一个指定的类型
第四步: 定义客户端. 客户端传入一个指定的类型给工厂, 工厂就会创建出对应的实现类.
代码实例
食品接口
public interface Food {
void showFood();
}
生产的食物种类
// 生产面包
public class Bread implements Food{
@Override
public void showFood() {
System.out.println("吃面包");
}
}
// 生产面条
public class Noodle implements Food{
@Override
public void showFood() {
System.out.println("吃面条");
}
}
// 生产大米
public class Rice implements Food{
@Override
public void showFood() {
System.out.println("吃大米");
}
}
创建工厂(整合食物)
// 创建工厂
public class FoodFactory {
public static Food getFood(String food){
if (food.equals("rice")){
return new Rice();
}else if (food.equals("noodle")){
return new Noodle();
}else {
return new Bread();
}
}
}