工厂方法模式定义:定义了一个创建对象的接口,但由于子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类;
“依赖倒置”原则:代码中减少了对具体类的依赖。
定义披萨抽象类 public abstract class Pizza { public String name; public String getName() { return this.name; } }
定义披萨具体类1 public class Pizza1 extends Pizza { public Pizza1(String name) { this.name = name; } } 定义披萨具体类2 public class Pizza2 extends Pizza { public Pizza2(String name) { this.name = name; } }
定义披萨工厂抽象类 public abstract class PizzaStore { public Pizza orderPizza(String type) { Pizza pizza; pizza = createPizza(type); return pizza; } public abstract Pizza createPizza(String type); }
定义披萨PizzaStoreFirst工厂具体类 public class PizzaStoreFirst extends PizzaStore { @Override public Pizza createPizza(String type) { Pizza pizza = null; if("1".equals(type)) { pizza = new Pizza1("Pizza name1"); }else if ("2".equals(type)) { pizza = new Pizza2("Pizza name2"); } return pizza; } } 定义披萨PizzaStoreSecond工厂具体类 public class PizzaStoreSecond extends PizzaStore { @Override public Pizza createPizza(String type) { Pizza pizza = null; if("3".equals(type)) { pizza = new Pizza1("Pizza name3"); }else if ("4".equals(type)) { pizza = new Pizza2("Pizza name4"); } return pizza; } }
通过继承披萨工厂抽象类可以实现个性化的披萨工厂,同时每个披萨工厂可以定义自己的披萨
抽象工厂模式定义:提供一个接口,用于创建相关或者依赖对象的家族,而不需要明确指定具体类。