今天来学习一下抽象工厂模式,在学习之前有两个非常重要的概念,产品等级,产品族。
产品等级就是说,一类产品,比如电视机属于一类产品,不管它是什么牌子的,他都属于电视,再比如冰箱,也属于一个产品等级。
产品族是说由不同产品等级组成的产品家族,比如海尔冰箱,海尔电视等等组成海尔产品族。再比如小米电视,手机,电脑等等组成小米产品族。
抽象工厂模式是要创造出一个产品族。
我们以一个画画的例子来解释其中的具体内容。简单起见,我要画一个红色矩形,绿色圆形。这时我要有两个产品等级,形状和颜色,然后这两个等级组成具体的产品族(抽象工厂)而红色矩形就为具体工厂。
接下来代码实现,先来定义两个产品等级,形状和颜色,分别有一个画和填充的方法
public interface Shape {
void draw();
}
public interface Color {
void fill();
}
然后定义具体的产品,也就是具体的形状,颜色
// 矩形
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("矩形");
}
}
// 圆形
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("圆形");
}
}
// 红色
public class Red implements Color {
@Override
public void fill() {
System.out.println("红色");
}
}
// 绿色
public class Green implements Color {
@Override
public void fill() {
System.out.println("绿色");
}
}
一个形状和一个颜色组成了我们的抽象工厂
abstract class AbstractFactory {
public abstract Shape createShape();
public abstract Color createColor();
}
现在我需要一个红色矩形,代码如下
public class RedRectangle extends AbstractFactory {
@Override
public Shape createShape() {
return new Rectangle();
}
@Override
public Color createColor() {
return new Red();
}
}
再比如我想要一个绿色圆形
public class GreenCircle extends AbstractFactory {
@Override
public Shape createShape() {
return new Circle();
}
@Override
public Color createColor() {
return new Green();
}
}
接下来看我们如何画出这两个形状
public class Main {
public static void main(String[] args) {
// 画红色矩形
AbstractFactory factory = new RedRectangle();
factory.createShape().draw();
factory.createColor().fill();
// 画绿色圆形
AbstractFactory factory1 = new GreenCircle();
factory1.createShape().draw();
factory1.createColor().fill();
}
}
运行结果如下
矩形
红色
圆形
绿色
我如果想画红色圆形直接新建一个RedCircle
类即可,继承AbstractFactory
。
欢迎评论区交流。
来源:CSDN
作者:液!
链接:https://blog.csdn.net/qq_42331001/article/details/104226090