抽象工厂模式的好处

编程入门 行业动态 更新时间:2024-10-28 16:20:08

<a href=https://www.elefans.com/category/jswz/34/1765602.html style=抽象工厂模式的好处"/>

抽象工厂模式的好处

抽象工厂模式的好处

本来在写一篇设计模式的体会的文章,不过这个礼拜忙于补习编译原理了,先写一点零碎的吧。
事先申明,以下内容只是我个人的体会,不保证正确,全面以及合理。
--------
在GOF的数量,创建型模式有好几个,最最常用的是工厂方法,简单的描述:
你需要创建很多对象,比如矩形,圆形,圆角矩形(也许这是一个组态软件,或者Visio)。
你可以随地来new,但是稍有经验的人就会选择由一个专门的方法来负责创建对象。如:
CDrawObj* CreateDrawObj(int ObjType)
这样做的好处是显而易见的:
1.代码集中了
2.如果修改了CreateDrawObj函数,可以不影响外部代码。比如CRectDrawObj被认为有问题,有人写了个新
类CRectDrawObjEx,那只要修改CreateDrawObj,就可以神不知鬼不觉地换掉了。

以上的例子,假设我们明白虚函数的概念,CDrawObj就是这么一个虚基类。(C#里更愿意抽象为Interface)

好,现在的代码的情况是:
有一个CreateDrawObj函数,然后其它地方到处散布着对这个函数的调用。
如果现在我有了整个一大套新的DrawObj,而且希望在运行的时刻,可以在两套DrawObj之间切换。
很直观的做法,给CreateDrawObj加一个参数: CDrawObj* CreateDrawObj(int ObjType,int Category)
其实这个办法也挺好的。

不过OO里不太喜欢这一套,我们喜欢把变数封装到对象内部,所以以上函数就变成了两个:
CFactory* CreateFactory(int FactoryType)
CFactory::CreateDrawObj(int ObjType)

这样,当我们希望整个更换DrawObj家族的时候,只要在CreateFactory的时候产生一个不同的工厂就可以了,
其它所有地方不需要修改。而使用 CDrawObj* CreateDrawObj(int ObjType,int Category) 的方式,在每个调用
CreateDrawObj的地方,都要根据情况传入不同的Category参数。

把变数封装到对象中,这是面向对象设计的一个小伎俩。

不知道说清楚了没有。

说实话,抽象工厂用的地方并不是很多,更常见的是工厂方法加模版方法的组合,这在框架设计中比较常用。

 

更多推荐

抽象工厂模式的好处

本文发布于:2023-06-16 01:30:30,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/737093.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:抽象   好处   工厂   模式

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!