创建型设计模式——工厂方法模式

160 阅读1分钟

1、介绍

工厂方法模式定义了一个用于创建对象的接口,让子类决定实例化相应的类,即使类的实例化推迟到子类中。

2、实现

工厂方法模式有子类与超类,其中超类可以是接口、抽象类、父类。根据不同参数类型返回一个Product子类对象。

2.1、产品类

首先定义两个不同的子类,每一个子类继承Product超类

public class Product1 extends Product {
    @Override 
    public void play() {
        ……
    }
}
public class Product2 extends Product {
    @Override 
    public void play() {
        ……
    }
}

2.2、工厂类

定义了超类和子类后,定义相应的工厂类,工厂类根据不同的参数返回不同的产品类 简单工厂模式方法与工厂模式方法的工厂类不同,前者传入参数根据参数创建不同的类,后者传入类。

简单工厂模式的工厂类
public class Factory {
    public Product create(String type){
        Product product = null;
        switch(type){
            case "Product1":{
                product=new Product1();
                break;
            }
            case "Product2":{
                product=new Product2();
                break;
            }
        }
        reutrn product;
    }
}
工厂模式的工厂类
public class Factory {
    public <T extends Product> T create(Class<T> clazz){
        Product product = null;
        String className=clazz.getName();
        try{
            product=(Product) Class.forName(className).newInstance();
        }catch(EXception e){
            e.printStacktrace();
        }
        reutrn (T) product;
    }
}
  • 工厂类可以是单例模式,获取产品类实例的方法是静态方法。
  • 工厂类根据不同的参数返回不同的产品类。

客户端调用

Product2 product2=Factory.create(Product2.class);
product2.play();

3、简单工厂模式和工厂模式的比较

简单工厂模式
  • 根据参数获取对应实例
  • 能够创建的类在编译时已经确定,如果需要增加则要修改工厂类
  • 当子类过多时不适用
工厂模式
  • 根据反射创建相应的实例
  • 能够灵活增加类,而无需修改工厂类