设计模式之抽象工厂模式
一、什么是抽象工厂模式?
1.1 作用
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
1.2 使用场景
- 一个系统要独立于它的产品的创建、组合和表示时。
- 一个系统要由多个产品系列中的一个来配置。
- 当你要强调一系列相关的产品对象的设计以便进行联合使用时。
- 当你提供一个产品类库,而只想显示它们的接口而不是实现时。
二、实例
车辆建造工厂和汽车涂装工厂
2.1 抽象类
抽象车辆,车辆可以移动
/**
* 抽象车辆
* @author yeyangshu
* @version 1.0
*/
public abstract class AbstractVehicle {
abstract void move();
}
抽象颜色,可以获得一种颜色
/**
* 抽象颜色
* @author yeyangshu
* @version 1.0
*/
public abstract class AbstractColor {
public abstract void paint();
}
2.2 创建车辆和颜色的实体类
/**
* 汽车
* @author yeyangshu
* @version 1.0
*/
public class Car extends AbstractVehicle {
public void move() {
System.out.println("汽车速度:120km/h");
}
}
/**
* 自行车
* @author yeyangshu
* @version 1.0
*/
public class Bicycle extends AbstractVehicle {
@Override
public void move() {
System.out.println("自行车速度:30km/h");
}
}
/**
* 白色
* @author yeyangshu
* @version 1.0
*/
public class White extends AbstractColor {
@Override
public void paint() {
System.out.println("白色涂装");
}
}
/**
* 黑色
* @author yeyangshu
* @version 1.0
*/
public class Black extends AbstractColor {
@Override
public void paint() {
System.out.println("黑色涂装");
}
}
2.3 创建抽象工厂
/**
* 抽象工厂类
* @author yeyangshu
* @version : AbstractFactory.java, v 0.1 20xx-xx-xx
*/
public abstract class AbstractFactory {
/**
* 建造车辆
* @return
*/
abstract AbstractVehicle createVehicle();
/**
* 得到车辆涂装颜色
* @return
*/
abstract AbstractColor getColor();
}
2.4 创建汽车工厂和自行车工厂实体类
/**
* 汽车工厂
* @author yeyangshu
* @version 1.0
*/
public class CarFactory extends AbstractFactory {
/**
* 汽车工厂创建小汽车
* @return
*/
@Override
public Car createVehicle() {
return new Car();
}
/**
* 涂装工厂为汽车喷白漆
* @return
*/
@Override
public White getColor() {
return new White();
}
}
/**
* 自行车工厂
* @author yeyangshu
* @version 1.0
*/
public class BicycleFactory extends AbstractFactory {
/**
* 自行车工厂建造自行车
* @return
*/
@Override
public Bicycle createVehicle() {
return new Bicycle();
}
/**
* 涂装工厂为自行车喷黑漆
* @return
*/
@Override
public Black getColor() {
return new Black();
}
}
2.5 使用工厂建造白色汽车和黑色自行车
public class Main {
public static void main(String[] args) {
// 创建汽车工厂
AbstractFactory carFactory = new CarFactory();
// 建造一辆汽车
AbstractVehicle car = carFactory.createVehicle();
// 为汽车喷漆
AbstractColor carColor = carFactory.getColor();
car.move();
carColor.paint();
// 创建自行车工厂
AbstractFactory bicycleFactory = new BicycleFactory();
// 建造一辆自行车
AbstractVehicle bicycle = bicycleFactory.createVehicle();
// 为自行车喷漆
AbstractColor bicycleColor = bicycleFactory.getColor();
bicycle.move();
bicycleColor.paint();
}
}
结果:
汽车速度:120km/h
白色涂装
自行车速度:30km/h
黑色涂装