抽象工厂模式(Abstract factory pattern)
作用
用来生产不同产品族的全部产品,可以看做是工厂方法模式的升级版
用途
在有多个业务品种、业务分类时,使用抽象工厂模式较为合适
弊端
对于增加新的产品,无能为力,支持增加产品族
案例(汽车引擎,座椅,轮胎产品族)
创建汽车引擎接口(并定义高低端引擎实例)
public interface Engine {
// 引擎发动速度
public abstract void run();
// 引擎启动速度
public abstract void start();
}
//高端引擎
class LuxuryEngine implements Engine{
public void run() {
System.out.println("引擎转速很快!");
}
public void start() {
System.out.println("引擎启动速度很快!");
}
}
//低端引擎
class LowEngine implements Engine{
public void run() {
System.out.println("引擎转速很慢!");
}
public void start() {
System.out.println("引擎启动速度很慢!");
}
}
创建汽车座椅接口(并定义高低端座椅实例)
public interface Seat {
//定义按摩功能
public abstract void massage();
}
//高端座椅
class LuxurySeat implements Seat{
public void massage() {
System.out.println("高端座椅可以按摩!");
}
}
//低端座椅
class LowSeat implements Seat{
public void massage() {
System.out.println("高端座椅不可以按摩!");
}
}
创建轮胎接口(并定义高低端轮胎实例)
public interface Tyre {
//定义轮胎寿命方法
public abstract void age();
}
//定义高端轮胎
class LuxuryTyre implements Tyre{
public void age() {
System.out.println("轮胎寿命很长!");
}
}
//定义低端轮胎
class LowTyre implements Tyre{
public void age() {
System.out.println("轮胎寿命很短!");
}
}
定义一个抽象工厂接口(封装一个产品族)
public interface CarFactory {
// 创建引擎对象
public abstract Engine createEngine();
// 创建座椅对象
public abstract Seat createSeat();
// 创建轮胎对象
public abstract Tyre createTyre();
}
定义高端产品族工厂
public class LuxuryCarFactory implements CarFactory{
public Engine createEngine() {
return new LuxuryEngine();
}
public Seat createSeat() {
return new LuxurySeat();
}
public Tyre createTyre() {
return new LuxuryTyre();
}
}
定义低端产品族工厂
public class LowCarFactory implements CarFactory{
public Engine createEngine() {
return new LowEngine();
}
public Seat createSeat() {
return new LowSeat();
}
public Tyre createTyre() {
return new LowTyre();
}
}
抽象工厂方式(用户可以建立一条产品族,用户只需要清楚:一个汽车工厂产品族接口,一个高低端工厂产品族接口)
public class CarUser {
public static void main(String[] args) {
Engine e = new LuxuryCarFactory().createEngine();
e.run();
e.start();
}
}