1.工厂模式的定义
2.工厂模式的使用场景
3.工厂模式的优势
4.工厂模式的实现
工厂方法模式一般来说是定义一个用于创建对象的接口,让子类决定实例化哪个类。使用工厂方法模式可以把对象的创建和使用分离开来。
工厂方法模式的使用场景:类的实例化过程比较复杂但是用new就可以完成创建的对象无需使用工厂模式。
工厂方法模式的优势:
1.使用工厂方法模式可以使对象的创建和使用分离更好的实现解耦;
2.可以降低代码的重复,一个复杂对象需要在多个地方使用,那么就会有很多重复代码,使用工厂方法模式统一管理,可以减少重复代码数量。
工厂方法模式主要分为四个模块:
1.抽象工厂:工厂方法模式的核心
2.具体工厂:实现具体的业务逻辑
3.抽象产品:工厂方法模式所创建的产品的父类
4.具体产品:实现抽象产品的某个具体产品的对象
工厂方法模式的实现
抽象工厂
/**
* 定义一个抽象工厂类
*/
public abstract class Factory {
/**
*
* @param clz 具体产品的类型
* @param <T>
* @return 具体产品对象
*/
public abstract <T extends Car> T createCar(Class<T> clz);
}
定义具体工厂类,继承抽象工厂实现创建对象的逻辑
/**
* 具体工厂
*/
public class CarFactory extends Factory{
@Override
public <T extends Car> T createCar(Class<T> 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);
}
网友评论