定义:定义一个建立对象的接口,由子类决定要实例化的对象类型,工厂方法让类的实例化推迟到子类中java
要点:框架
1.工厂模式让实现和使用解耦ide
2.工厂方法是继承于超类,实现超类中抽象建立对象的接口,不用于简单工厂,使用组合方式来达到解耦的目的工具
3.工厂方法更像是一种框架,而简单工厂只是一种简单的实现方式,像一种工具测试
4.工厂方法并非真正运行时决定建立的对象,而是选择的子类决定了建立的对象,一样能够用多个简单工厂的方式来达到这样的目的。可是简单工厂违反了OO设计原则“依赖抽象,不要依赖具体类”设计
实现:code
package com.jv.designpatterns.factory.factorymethod; //定义匹萨的超类 public interface Pizza { }
package com.jv.designpatterns.factory.factorymethod; public class PizzaA implements Pizza { }
package com.jv.designpatterns.factory.factorymethod; public class PizzaB implements Pizza { }
package com.jv.designpatterns.factory.factorymethod; public abstract class PizzaStore { //定义抽象建立对象实例方法,交有子类决定建立的对象类型 public abstract Pizza createPizza(); public void orderPizza() { Pizza p = createPizza(); //其余方法 } }
package com.jv.designpatterns.factory.factorymethod; public class PizzaStoreA extends PizzaStore { //子类实现抽象父类中的 建立匹萨对象的抽象方法,由子类决定要建立的对象究竟是谁 @Override public Pizza createPizza() { return new PizzaA(); } }
package com.jv.designpatterns.factory.factorymethod; public class PizzaStoreB extends PizzaStore { //子类实现抽象父类中的 建立匹萨对象的抽象方法,由子类决定要建立的对象究竟是谁 @Override public Pizza createPizza() { return new PizzaB(); } }
没有更详细的模拟场景写测试代码,感兴趣的同窗能够尝试着添加代码来完成测试,动动手,动动脑对象