一句话定义
定义一个 创建 一系列相关或相互依赖对象 的接口,而不指定具体类。
使用场景
具有多个相关的类型,且只会使用其中之一。
实现要点
1. 在一个工厂里面聚合多个同类产品
2. 主要解决接口选择问题
3. 实际就是工厂模式的工程模式,一个生产工厂的工厂。
情景假设
每一个图形都有 形状 和 颜色 两个属性,通过不同的搭配,生产不同的图形。
实现步骤
1. 创建形状和颜色的接口
/**
* 形状接口类
*/
public interface Shape {
void draw();
}
/**
* 颜色接口
*/
public interface Color {
void paint();
}
2. 创建具体形状和颜色
/**
* 具体图形类
*/
public class CircleShape implements Shape {
@Override
public void draw() {
Log.i("info", "draw: ==++ 圆");
}
}
/**
* 具体图形类
*/
public class RectangleShape implements Shape {
@Override
public void draw() {
Log.i("info", "draw: ==++ 方");
}
}
/**
* 具体颜色类
*/
public class RedColor implements Color{
@Override
public void paint() {
Log.i("info", "paint: ==++ 红色");
}
}
/**
* 具体颜色类
*/
public class GreenColor implements Color {
@Override
public void paint() {
Log.i("info", "paint: ==++ 绿色" );
}
}
3. 创建抽象工厂
/**
* 工厂抽象类
*/
public abstract class AbstractFactory {
/**
* 创建形状
*/
public abstract Shape createShape();
/**
* 创建颜色
*/
public abstract Color createColor();
}
4. 创建抽象工厂子类真实工厂
/**
* 具体工厂,创建红色的圆
*/
public class ShapeFactoryA extends AbstractFactory {
@Override
public Shape createShape() {
return new CircleShape();
}
@Override
public Color createColor() {
return new RedColor();
}
}
/**
* 具体工厂类 创建绿色的方形
*/
public class ShapeFactoryB extends AbstractFactory{
@Override
public Shape createShape() {
return new RectangleShape();
}
@Override
public Color createColor() {
return new GreenColor();
}
}
5. 使用中创建形状
// 抽象工厂模式创建
ShapeFactoryA shapeFactoryA = new ShapeFactoryA()
Color color = shapeFactoryA.createColor()
Shape shape = shapeFactoryA.createShape()
color.paint()
shape.draw()