嵌入式C语言设计:什么情况下要用建造者模式?

嵌入式技术

1412人已加入

描述

1 - 什么是建造者模式?

建造者模式(Builder Pattern),也称生成器模式,是创建型模式的一种。使用多个简单的对象一步一步创建一个复杂的对象,将一个复杂对象的构建过程这个对象的具体表示进行分离,使得同样的构建过程可以创建不同的表示。

通俗来说就是,使用电脑或手机的人,不需要知道电脑和手机是怎样装配出来的,也不需要知道电脑和手机的装配顺序和细节,他们只需要关心如何获得手机和电脑,以及怎样使用它们,就可以了。

上面的定义看起来有点绕口难懂,可以把以上定义拆开来分别说明,

“复杂对象的构建过程”是指一款产品的创建过程,它是表示一个过程,比如电脑的创建过程,手机的创建过程。

“这个对象的具体表示”是表示一个具体的产品,是指经历过创建过程而生产出来的产品,比如电脑,手机。

建造者模式把“构建过程”和“具体表示”都抽象出来,可以很好地封装一款产品的构建过程,使用者不需要关心具体的构建过程和细节,而且对于一款产品的构建过程顺序可以随时调整。

建造者模式涉及4种参与角色:产品类Product,抽象建造者Builder,具体建造者ConcreteBuilder,指挥者(也称调用者)Director。这4种参与角色的具体说明如下:

产品类Product:指具体产品的抽象,比如手机,电脑,等等,这些产品都有复杂的构建过程。

抽象建造者Builder:指对生产过程进行抽象,这指示一个过程的抽象,并不是具体的实例,比如,手机制造过程,涉及到ROM、SRAM、CPU、摄像头、屏幕,等等。

具体建造者ConcreteBuilder:通过继承抽象建造者Builder而进行实例化的对象,是一个具体实例,比如,水果手机建造者fruit_phone_builder,笑眯眯手机建造者xiaomimi_phone_builder

指挥者(也称调用者)Director:指挥者是指,调用以上具体建造者的抽象类,通过调用不同的建造者,从而构建出不同类型的手机,然后调用这些手机对象完成不同的功能。需要注意的是,指挥者不包含具体的产品对象,产品对象是包含在具体建造者角色里面的。

C语言

图片来源:网络

2 – 什么情况下要用建造者模式?

以下情况可以考虑使用建造者模式:

(1)产品有比较复杂的内在结构且由多个对象组合而成,比如手机和电脑的主板,由CPU,内存,硬盘等等组成。

(2)产品有比较复杂的构建过程,涉及比较多的构建步骤。

(3)随着构建过程顺序不同,会产生不同的产品。

举一个简单的例子,比如生产手机主板,手机主板是一个比较复杂的产品对象,不管是哪个品牌的手机主板,都要涉及到存储ROM,运行内存SRAM,处理器CPU,以及摄像头Camera,等等零部件。

这些零部件是一个个单独的对象,而手机主板则是由这些零部件组成的一个复杂的对象,使用手机主板的人,不关心手机主板的组装过程,以及使用零部件的组装顺序,他们只关心最终组装出来的手机主板。

C语言

3 – 如何使用建造者模式?

还是以手机主板装配为例,由于建造者模式涉及到4种主要角色:产品类Product,抽象建造者Builder,具体建造者ConcreteBuilder,指挥者(也称调用者)Director。

因此,在程序代码里面,需要为这4种主要角色进行代码编写。

1. 先创建phone.h文件,包含一个手机主板抽象类struct phone,这个手机主板抽象类主要包含了手机主板的各种配置信息,比如ROM和SRAM的容量,CPU型号,以及摄像头像素,并且提供了函数接口去填充这些配置信息。

C语言

2. 在phone.c文件里面,主要实现了struct phone结构体的函数接口,在这些函数的具体实现里面,填充了手机的具体配置信息,代码如下图所示。

C语言

3. 然后在phone_builder.h里面,声明一个建造者的抽象类,注意,这只是建造者的一个抽象,并不代表具体的建造者,这个建造者抽象类提供了一系列接口,可以让不同的手机主板制造商去继承对接,如下图所示。

C语言

4. 接下来,到具体的建造者角色,建造者角色可以有很多个,因为生产手机主板的厂家会有很多,一般都继承自抽象建造者,建造者角色是一个真正具体的实例,并且提供其父类phone_builder的具体实现,以fruit_phone_builder.h为例,如下图所示。

编辑:黄飞

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分