前言
本文是对工厂模式的进一步学习,是对抽象工厂模式的记录。
对于工厂模式的介绍文章可以看https://blog.csdn.net/yohuU/article/details/112669891
抽象工厂模式
1.抽象工厂模式与工厂模式的区别
首先先介绍什么是抽象工厂模式,抽象工厂模式与工厂模式有什么区别
在介绍这两者区别之前,我们需要知道两个概念,产品族和产品等级结构。产品族,是指位于不同产品等级结构中,功能相关联的产品组成的家族。举个例子来说,我们之前的文章中只是通过工厂来生产不同类型的几何图形(矩形,圆形,正方形),这些东西都能够统称为一个产品等级。对于产品族来说,我们可以引入另一变量:颜色,也就是说黄色的矩形、黄色的圆形、黄色的正方形组成了一个产品族。
当然我个人认为,产品族和产品等级在某些情况下不一定只有一种划分的方法。例如上述例子中,也可以把不同颜色相同形状作为一个产品等级,相同颜色不同形状划分为一个产品族,这应该是看工厂是如何划分来进行区别。
2.抽象工厂模式实现图形的绘制
上面已经基本介绍了抽象工厂模式,现在我们继续来画正方形,圆形和矩形(老画图选手了)。
本程序工厂类类图如下所示:
每个颜色都有三个对应的图形,这样就能够生产相应颜色,相应形状的产品。
产品类中都继承了Shape接口,Rectangle、Circle、Square三个为抽象类,他们的子类分别为RedRectangle、BlueRectangle等,这些都是被生产的产品类。
3.工厂类的实现
这里通过抽象工厂,得到了三个具体工厂,分别是红色工厂、蓝色工厂和绿色工厂,每个工厂都能够生产正方形、长方形、圆形三个形状。
代码如下所示
public interface AbstractFactory {
public Rectangle createRectangle();
public Square createSquare();
public Circle createCircle();
}
class RedFactory implements AbstractFactory{
@Override
public Circle createCircle() {
return new RedCircle();
}
@Override
public Rectangle createRectangle() {
return new RedRectangle();
}
@Override
public Square createSquare() {
return new RedSquare();
}
}
class BlueFactory implements AbstractFactory{
@Override
public Circle createCircle() {
return new BlueCircle();
}
@Override
public Rectangle createRectangle() {
return new BlueRectangle();
}
@Override
public Square createSquare() {
return new BlueSquare();
}
}
class GreenFactory implements AbstractFactory{
@Override
public Circle createCircle() {
return new GreenCircle();
}
@Override
public Rectangle createRectangle() {
return new GreenRectangle();
}
@Override
public Square createSquare() {
return new GreenSquare();
}
}
运行图
本文程序源代码可以去github上下载
链接:https://github.com/jianqiang-Zhang/DesignPattern