抽象工厂模式定义
是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。
抽象工厂模式和工厂模式很相似, 是把工厂模式中的工厂的创建方式抽象化了.
抽象工厂的成员
- 抽象工厂
- 具体工厂
- 抽象产品
- 具体产品
- 指挥者(用来生产工厂的)
我们还是用食物来举个例子
1,抽象产品
/**
* 抽象产品
*/
public interface Food {
void eat();
}
2,具体产品
/**
* 具体产品
*/
public class BaoZi implements Food {
@Override
public void eat() {
System.out.println("小包子");
}
}
/**
* 类名不要用拼音,除非是国内特色的.
*/
public class SuanLaFen implements Food {
@Override
public void eat() {
System.out.println("酸辣粉");
}
}
3,抽象工厂
/**
* 抽象工厂
*/
public abstract class FoodFactory {
//根据参数不同,返回不同产品
public abstract Food getFood(String name);
}
4,具体工厂(可以多个)
/**
* 具体的工厂
*/
public class BaoZiFactory extends FoodFactory {
@Override
public Food getFood(String name) {
if("包子".equals(name)){
return new BaoZi();
}
return null;
}
}
/**
* 具体的工厂
*/
public class SuanLaFenFactory extends FoodFactory{
@Override
public Food getFood(String name) {
return new SuanLaFen();
}
return null;
}
5,指挥者
/**
* 指挥者 -> 生产工厂
*/
public class DirectorFoodFactory {
public static FoodFactory getFactory(String name){
if("包子工厂".equals(name)){
return new BaoZiFactory();
}else if("酸辣粉工厂".equals(name)){
return new SuanLaFenFactory();
}
return null;
}
}
6,测试类
public static void main(String[] args) {
FoodFactory baoZiFactory = DirectorFoodFactory.getFactory("包子工厂");
Food baozi = baoZiFactory.getFood("包子");
baozi.eat();
//先产品工厂,在来产品
FoodFactory slfFactory = DirectorFoodFactory.getFactory("酸辣粉工厂");
Food slf = slfFactory.getFood("酸辣粉");
slf.eat();
}