抽象工厂模式(GUI实现画不同颜色的圆,正方形和长方形)

前言

本文是对工厂模式的进一步学习,是对抽象工厂模式的记录。
对于工厂模式的介绍文章可以看https://blog.csdn.net/yohuU/article/details/112669891


抽象工厂模式

1.抽象工厂模式与工厂模式的区别

首先先介绍什么是抽象工厂模式,抽象工厂模式与工厂模式有什么区别

在介绍这两者区别之前,我们需要知道两个概念,产品族和产品等级结构。产品族,是指位于不同产品等级结构中,功能相关联的产品组成的家族。举个例子来说,我们之前的文章中只是通过工厂来生产不同类型的几何图形(矩形,圆形,正方形),这些东西都能够统称为一个产品等级。对于产品族来说,我们可以引入另一变量:颜色,也就是说黄色的矩形、黄色的圆形、黄色的正方形组成了一个产品族。
当然我个人认为,产品族和产品等级在某些情况下不一定只有一种划分的方法。例如上述例子中,也可以把不同颜色相同形状作为一个产品等级,相同颜色不同形状划分为一个产品族,这应该是看工厂是如何划分来进行区别。

2.抽象工厂模式实现图形的绘制

上面已经基本介绍了抽象工厂模式,现在我们继续来画正方形,圆形和矩形(老画图选手了)。
本程序工厂类类图如下所示:

«<interface>» AbstractFactory +createRectangle() : Rectangle +createSquare() : Square +createCircle() : Circle RedFactory +createRectangle() : Rectangle +createSquare() : Square +createCircle() : Circle BlueFactory +createRectangle() : Rectangle +createSquare() : Square +createCircle() : Circle GreenFactory +createRectangle() : Rectangle +createSquare() : Square +createCircle() : Circle

每个颜色都有三个对应的图形,这样就能够生产相应颜色,相应形状的产品。
产品类中都继承了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


总结

又到了总结的部分,到此工厂模式三剑客基本上已经结束了,但是对工厂模式的理解和运用还是处于最初级的阶段,以后学习体会的路还很长。 当然对于抽象工厂模式,我认为该模式虽然代码结构比工厂模式来说,在多产品等级结构时更加优越,但是在简单的应用场景下,该模式就会显得比较累赘了。所以说,没有最好的模式,只有最适合的模式。
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值