优点:实现了开闭原则,多出一个种类的coffee,直接多出一个子类实现interface FactoryCoffee,不需要做出更改 缺点:种类过多,就会很繁琐 public abstract class Coffee{ public abstract String getName(); }
public class AmericanCoffee extends Coffee { @Override public String getName() { return "让美国再次伟大"; } }
public class ChinaCoffee extends Coffee { @Override public String getName() { return "中国coffee"; } }
public interface FactoryCoffee { Coffee createCoffee(); }
public class FactoryCoffeeAmerican implements FactoryCoffee { @Override public Coffee createCoffee() { return new AmericanCoffee(); } }
public class FactoryCoffeeChina implements FactoryCoffee { @Override public Coffee createCoffee() { return new ChinaCoffee(); } }
public class CoffeeStore { private FactoryCoffee factoryCoffee; public FactoryCoffee getFactoryCoffee() { return factoryCoffee; } public void setFactoryCoffee(FactoryCoffee factoryCoffee) { this.factoryCoffee = factoryCoffee; } public Coffee createCoffee(){ Coffee coffee = factoryCoffee.createCoffee(); return coffee; } }
public class Client{ public static void main(String[] args) { //创建store对象 CoffeeStore coffeeStore = new CoffeeStore(); //创建具体工厂对象 FactoryCoffeeAmerican factory = new FactoryCoffeeAmerican(); //传入工厂对象 coffeeStore.setFactoryCoffee(factory); //获得coffee对象 Coffee coffee = coffeeStore.createCoffee(); //打印coffee名字 System.out.println(coffee.getName()); } }