工厂方法设计模式
-
工厂方法设计模式:允许在子类中实现本类的实例化类
-
工厂方法模式UML图
- 产品类(Product)中定义了工厂方法创建的对象接口
- 具体产品类(ConcreteProduct)实现产品类接口
- 工厂类(Creator,因为由它来创建产品类,所以叫做工厂类)声明工厂方法,返回一个产品类对象。可用于调用创建产品类对象的生成方法
- 具体工厂类(ConcreteCreator)重写用于创建具体产品类对象的的方法
-
示例:
/** * @author xiao儿 * @date 2019/8/28 0:05 * @Description 产品类,用于实例化工厂方法模式的基类 */ public interface Pet { public String perSound(); } /** * @author xiao儿 * @date 2019/8/28 0:06 * @Description 具体产品类,用于实例化工厂方法模式的派生类1 */ public class Dog implements Pet { @Override public String perSound() { return "Bow Bow ..."; } } /** * @author xiao儿 * @date 2019/8/28 0:07 * @Description 具体产品类,用实例化工厂方法模式的派生类2 */ public class Cat implements Pet { @Override public String perSound() { return "Meaw Meaw ..."; } } /** * @author xiao儿 * @date 2019/8/28 0:09 * @Description 工厂方法模式实现,并展示对象创建逻辑 */ public class PetFactory { public Pet getPet(String petType) { Pet pet = null; // 工厂实例化对象的基本逻辑 if ("Bow".equals(petType)) { pet = new Dog(); } else if ("Meaw".equals(petType)) { pet = new Cat(); } return pet; } } /** * @author xiao儿 * @date 2019/8/28 0:11 * @Description 使用工厂方法模式,main类 */ public class SampleFactoryMethod { public static void main(String[] args) { PetFactory petFactory = new PetFactory();// 创建工厂 Pet pet = petFactory.getPet("Bow");// 工厂实例化一个对象 // 你并不知道会创建那种对象工厂 System.out.println(pet.perSound()); } }
-
工厂方法模式应用场景
- 当需要创建一个类,而在编程时不能确定
- 当一个类希望由其子类来指定所创建对象的具体类型时
- 当我们想要定位被创建类,并获取相关信息时