public class FoodFactory {
public static Food getFood(String foodType) {
switch (foodType) {
case "apple":
return new AppleFood();
case "banana":
return new BananaFood();
// 新增菠萝
case "pineapple":
return new PineappleFood();
}
return null;
}
}
public abstract class AbstractFactory {
public abstract Food getFood();
}
2.2 核心工厂类
public class AppleFactory extends AbstractFactory {
@Override
public Food getFood() {
return new AppleFood();
}
}
public class BananaFactory extends AbstractFactory {
@Override
public Food getFood() {
return new BananaFood();
}
}
public class PineappleFactory extends AbstractFactory {
@Override
public Food getFood() {
return new PineappleFood();
}
}
public class AppleFood implements Food {
@Override
public void eat(String personName) {
System.out.println(personName + "吃了一个苹果");
}
@Override
public void remark(String personName, String feel) {
System.out.println(personName + "评价苹果:" + feel);
}
}
public class BananaFood implements Food {
@Override
public void eat(String personName) {
System.out.println(personName + "吃了一个香蕉");
}
@Override
public void remark(String personName, String feel) {
System.out.println(personName + "评价香蕉:" + feel);
}
}
public class PineappleFood implements Food {
@Override
public void eat(String personName) {
System.out.println(personName + "吃了一个菠萝");
}
@Override
public void remark(String personName, String feel) {
System.out.println(personName + "评价菠萝:" + feel);
}
}
2.5 使用
public class EatTest {
public static void main(String[] args) {
// 调用方法
String eatType = "banana";
String personName = "张三";
BananaFactory bananaFactory = new BananaFactory();
Food food = bananaFactory.getFood();
food.eat(personName);
food.remark(personName,"还不错");
// 优点:满足了开合原则,
// 缺点: 没新增一个类型需要同步增加一个工厂类,类太多了,系统维护和类加载都会有影响
}
}
3. 抽象工厂模式
3.1 抽象工厂类
public abstract class AbstractFactory {
public abstract Food getFood();
public abstract Color getColor();
}
3.1 核心工厂类
public class AppleFactory extends AbstractFactory {
@Override
public Food getFood() {
return new AppleFood();
}
@Override
public Color getColor() {
return new AppleColor();
}
}
public class BananaFactory extends AbstractFactory {
@Override
public Food getFood() {
return new BananaFood();
}
@Override
public Color getColor() {
return new BananaColor();
}
}
public class PineappleFactory extends AbstractFactory {
@Override
public Food getFood() {
return new PineappleFood();
}
@Override
public Color getColor() {
return new PineappleColor();
}
}
3.2 核心接口
public interface Food {
void eat(String personName);
void remark(String personName, String feel);
}
public interface Color {
void getThisColor();
}
3.3 待创建对象的类
public class AppleFood implements Food {
@Override
public void eat(String personName) {
System.out.println(personName + "吃了一个苹果");
}
@Override
public void remark(String personName, String feel) {
System.out.println(personName + "评价苹果:" + feel);
}
}
public class AppleColor implements Color {
@Override
public void getThisColor() {
System.out.println("红红的苹果");
}
}
public class BananaFood implements Food {
@Override
public void eat(String personName) {
System.out.println(personName + "吃了一个香蕉");
}
@Override
public void remark(String personName, String feel) {
System.out.println(personName + "评价香蕉:" + feel);
}
}
public class BananaColor implements Color {
@Override
public void getThisColor() {
System.out.println("金黄的香蕉");
}
}
// 菠萝省略...