工厂方法模式的简单分析

1.工厂模式的定义
2.工厂模式的使用场景
3.工厂模式的优势
4.工厂模式的实现
工厂方法模式一般来说是定义一个用于创建对象的接口,让子类决定实例化哪个类。使用工厂方法模式可以把对象的创建和使用分离开来。
工厂方法模式的使用场景:类的实例化过程比较复杂但是用new就可以完成创建的对象无需使用工厂模式。
工厂方法模式的优势:
1.使用工厂方法模式可以使对象的创建和使用分离更好的实现解耦;
2.可以降低代码的重复,一个复杂对象需要在多个地方使用,那么就会有很多重复代码,使用工厂方法模式统一管理,可以减少重复代码数量。
工厂方法模式主要分为四个模块:
1.抽象工厂:工厂方法模式的核心
2.具体工厂:实现具体的业务逻辑
3.抽象产品:工厂方法模式所创建的产品的父类
4.具体产品:实现抽象产品的某个具体产品的对象
工厂方法模式的实现
抽象工厂

/**
 * 定义一个抽象工厂类
 */
public abstract class Factory {

    /**
     *
     * @param clz 具体产品的类型
     * @param 
     * @return 具体产品对象
     */
    public abstract  T createCar(Class clz);

}

定义具体工厂类,继承抽象工厂实现创建对象的逻辑


/**
 * 具体工厂
 */
public class CarFactory extends Factory{


    @Override
    public  T createCar(Class clz) {

        Car car = null;
        try {
            car = (Car) Class.forName(clz.getName()).newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }


        return (T) car;
    }
}

定义抽象产品即具体产品的父类

/**
 * 具体产品的父类
 */
public abstract class Car {

    /**
     * 可以开
     */
    public abstract void drive();

    /**
     * 可以乘坐的人数
     */
    public abstract void peoples(int i);
}

具体产品(继承抽象产品)

/**
 * 具体车的种类
 */
public class SUVCar extends Car{

    @Override
    public void drive() {
        Log.i("Car","SUVCar可以开走了!!!");
    }

    @Override
    public void peoples(int i) {
        Log.i("Car","SUVCar可以乘坐"+i+"个人");

    }
}


public class TruckCar extends Car{
    @Override
    public void drive() {
        Log.i("Car","TruckCar可以开走了!!!");
    }

    @Override
    public void peoples(int i) {
        Log.i("Car","TruckCar可以乘坐"+i+"个人");
    }
}

使工厂运作起来

   private void productCar(){
        Factory factory = new CarFactory();

        TruckCar truckCar = factory.createCar(TruckCar.class);
        truckCar.drive();
        truckCar.peoples(6);

        SUVCar suvCar = factory.createCar(SUVCar.class);
        suvCar.drive();
        suvCar.peoples(7);
    }

你可能感兴趣的:(工厂方法模式的简单分析)