概念
工厂方法模式又称工厂模式,也叫多态工厂模式,属于类创建型模式
工厂方法模式实质就是: 把创建对象的过程抽象出来不实现,让其子类或实现类来决定实例化那个类.
实现方式
我们先简单的来看看工厂模式的组成:
- 抽象工厂(abstract factory): 抽象对象.
- 具体工厂实现(real factory): 实际创建对象的工厂,负责创建一个或多个对象。
- 抽象产品(abstract product): 工厂角色生产的所有对象都需要依赖此抽象。一般通过接口或者抽象类来实现.
- 具体产品实现(real product): 具体的产品实现,依赖抽象角色.由工厂角色来创建
抽象Car
/**
* car抽象
*/
public abstract class Car {
/**
* 车俩启动
*/
public abstract void run();
}
具体Car实现
/**
* 宝马车辆实现类
* @author yuxuan
*/
public class BMWCar extends Car{
@Override
public void run() {
System.out.println("BMW run");
}
}
public class QQCar extends Car{
@Override
public void run() {
System.out.println("QQ run");
}
}
抽象工厂
/**
* 抽象工厂
*/
public abstract class CarFactory {
public abstract Car createCar();
}
具体工厂实现
/**
* 宝马用来创建车辆的工厂类
* @author yuxuan
*/
public class BMWCarFactory extends CarFactory{
public Car createCar() {
return new BMWCar();
}
}
/**
* 宝马用来创建车辆的工厂类
* @author yuxuan
*/
public class QQCarFactory extends CarFactory{
public Car createCar() {
return new QQCar();
}
}
工厂方法模式的优缺点
优点
- 在工厂方法模式中,使用方只需要知道所要对象的具体工厂,无须关心具体的创建过程,甚至不需要具体类的类名
- 在系统增加新的对象时,我们只需要添加一个具体实现类和对应的实现工厂,无需对原工厂进行任何修改,很好地符合了“开闭原则”
缺点
- 每次增加一个对象时,都需要增加一个具体类和对象实现工厂,是的系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。
总结
- 工厂方法模式完全符合“开闭原则”。
- 工厂方法模式使用继承,将对象的创建交给子类,通过子类实现工厂方法来创建对象。
- 工厂方法让子类决定要实例化的类是哪一个。
- 在工厂方法模式中,创建者通常会包含依赖于抽象产品的代码,而这些抽象产品是、由子类创建的,创建者不需要真的知道在制作哪种具体产品。
网友评论