1.简介
它提供一个接口,用于创建相关或依赖对象的家族,而不需要明确的指定具体类。
2.小栗子(原料工厂)
需求:各个地区pizza店,需要相同类型,不同风格的原料
3.代码实现
3.1 面团,各个地区的面团可能不同
public interface Dough { // 面团抽象类
public abstract String getName();
}
public class SeattleDough implements Dough { // 西雅图面团
@Override
public String getName() {
return "Seattle Dough";
}
}
public class NYDough implements Dough { // 纽约面团
@Override
public String getName() {
return "NY Dough";
}
}
3.2 酱汁,各个地区的酱汁味道可能不同
public interface Sauce { // 酱汁抽象类
public abstract String getName();
}
public class SeattleSauce implements Sauce { // 西雅图酱汁
@Override
public String getName() {
return "Seattle Sauce";
}
}
public class NYSauce implements Sauce { // 纽约酱汁
@Override
public String getName() {
return "NY Sauce";
}
}
3.3 原料工厂
public interface PizzaIngredientFactory { // 原料抽象工厂
public abstract Dough createDough();
public abstract Sauce createSauce();
}
// 西雅图原料工厂
public class SeattlePizzaIngredientFactory implements PizzaIngredientFactory {
@Override
public Dough createDough() {
return new SeattleDough();
}
@Override
public Sauce createSauce() {
return new SeattleSauce();
}
}
// 纽约原料工厂
public class NYPizzaIngredientFactory implements PizzaIngredientFactory {
@Override
public Dough createDough() {
return new NYDough();
}
@Override
public Sauce createSauce() {
return new NYSauce();
}
}
4.测试
public class AbstractFactoryDemo {
public static void main(String[] args) {
PizzaIngredientFactory nyFactory = new NYPizzaIngredientFactory();
Dough nyDough = nyFactory.createDough();
System.out.println(nyDough.getName());
PizzaIngredientFactory seattleFactory = new SeattlePizzaIngredientFactory();
Dough seattleDough = seattleFactory.createDough();
System.out.println(seattleDough.getName());
}
}
网友评论