工厂方法模式

来源:互联网 发布:异界大巫txt吾知 编辑:程序博客网 时间:2024/06/03 22:07

一句话定义:

定义一个用于创建对象的接口,让其子类决定实例化哪个工厂类,将创建延迟到子类进行。

使用场景:

1. 复杂的对象的创建2. 明确知道不同条件创建不同的对象

实现要点:

1. 子类实现工厂接口,返回的也是一个抽象的产品2. 创建过程在子类执行

情景假设:

工厂模式的常见例子。汽车工程,能够生产奥迪和宝马两种汽车。

实现步骤:

1. 创建汽车抽象类
 /* * 汽车工厂  汽车抽象类 */public abstract class Car {    public abstract String name();}
2. 创建包装实体类
public class BaomaCar extends Car {    @Override    public String name() {        return "宝马  82";    }}
public class AodiCar extends Car {    @Override    public String name() {        return "奥迪  23";    }}
3. 创建汽车工厂
public class CarFactory {    /**     * 创建方法     * @param <T> 汽车泛型     */    public <T extends Car>  T createCar(Class<T> clz){        T car = null;        try {            car = (T) Class.forName(clz.getName()).newInstance();        } catch (Exception e) {            e.printStackTrace();        }        return car;    }}
4. 使用工厂进行创建
        // 使用工厂进行创建        AodiCar car = new CarFactory().createCar(AodiCar.class);        BaomaCar car1 = new CarFactory().createCar(BaomaCar.class);        Log.i("info", "onCreate: ==++" + car.name());        Log.i("info", "onCreate: ==++" + car1.name());

补充内容:反射

上面创建Car实体的时候用到了反射,也可以用常规方式分别创建接口进行创建。如下:
    /**     * 创建奥迪汽车接口     */    public AodiCar createAodiCar(){        return  new AodiCar();    }
反射机制的实现原理不做分析,简单用法:1. 反射可以获得所有类的方法、属性2. 通过 实例.getClass() 获得Class对象3. 通过Class.forName("name") 获得Class对象4. Class中getName() 获得类名字符串5. Class中newInstance()调用类的默认构造方法创建实例
0 0
原创粉丝点击