社区
模式及实现
帖子详情
讨论之一 abstract factory
dtor
2008-01-07 11:12:42
以下是本人对abstract factory的见解,希望和大家一起讨论。
abstract factory 模式是运用c++的特性:继承性和多态性来完成的一个设计。
这样设计,简单地运用了多态,使client程序更易编写,也使程序的思路清晰,便于维护。
...全文
381
32
打赏
收藏
讨论之一 abstract factory
以下是本人对abstract factory的见解,希望和大家一起讨论。 abstract factory 模式是运用c++的特性:继承性和多态性来完成的一个设计。 这样设计,简单地运用了多态,使client程序更易编写,也使程序的思路清晰,便于维护。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
32 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
matrixdwy
2008-07-02
打赏
举报
回复
LZ的理解属于泛泛而谈,有很多设计模式都是
“运用c++的特性:继承性和多态性来完成的一个设计。这样设计,简单地运用了多态,使client程序更易编写,也使程序的思路清晰,便于维护。”
loki2k
2008-06-25
打赏
举报
回复
如果不这么搞
请问该怎么搞?
wanglovec
2008-06-05
打赏
举报
回复
因为在创建client时是需要调者传入具体的工厂
》》 呵呵 那你 生成具体工厂不需要代码吗? 如果需求变了 这里不业得改变吗?
icosagon
2008-05-13
打赏
举报
回复
工厂类一般是内部实现复杂,外接接口简单
icosagon
2008-05-13
打赏
举报
回复
抽象工厂是为了便于维护,一个工厂类就够了,写多了反而不利于维护
wuliang_227
2008-05-09
打赏
举报
回复
小弟我初学abstract factory时间不长,以下是我的浅见,请勿见笑。 我认为你这样将代码写出来,并没有将abstract factory的妙处写出来,你代码里面着重点在abstract factory如何实现,好处是在别人用他的时候的方便。
比如:我现在写的client代码是不需要知道具体的工厂是哪个,而是只管从工厂里面得到具体的产品就可以了:
class client
{
public:
client(CAbstractFactory* asFac) : mbASFactory(asFac)
{}
void showProduct()
{
/* 我们不需要关注,product 是 CProductA1,CProductA2,CProductB1还是CProductB2
* 因为在创建client时是需要调者传入具体的工厂,所以作为client不需要关心我们是对具体的哪个
* product 在操作,我们将所有的工厂看作是:CAbstractFactory, 不关心其具体的 concrete factory,
* 无论有多少种 concrete factory
* 我想这就是abstract factory的妙处吧。
*/
CAbstractProductA* product = mbASFactory->CreateProductA->WhoAmI();
}
private:
CAbstractFactory* mbASFactory;
};
iambic
2008-05-07
打赏
举报
回复
>以下是本人对********的见解,希望和大家一起讨论。
>********模式是运用c++的特性:继承性和多态性来完成的一个设计。
>这样设计,简单地运用了多态,使client程序更易编写,也使程序的思路清晰,便于维护。
你把你的理解说出来,但是把模式的名字盖住。看谁还猜得出来你说的模式是哪个。
overcomeunicom990702
2008-05-07
打赏
举报
回复
CConcreteFactory1* pFactory1 = new CConcreteFactory1();
~~~~~~~~~~~~~这里为什么要用派生类指针?
CConcreteFactory2* pFactory2 = new CConcreteFactory2();
~~~~~~~~~~~~~~还有这里也是,为什么不用抽象类指针?
sungoco2
2008-05-07
打赏
举报
回复
class CConcreteFactory1 :
public CAbstractFactory
{
public:
CConcreteFactory1(void){};
~CConcreteFactory1(void){};
virtual CAbstractProductA* CreateProductA(){ return new CProductA1(); };
virtual CAbstractProductB* CreateProductB(){ return new CProductB1(); };
};
class CConcreteFactory2 :
public CAbstractFactory
{
public:
CConcreteFactory2(void){};
~CConcreteFactory2(void){};
virtual CAbstractProductA* CreateProductA(){ return new CProductA2(); };
virtual CAbstractProductB* CreateProductB(){ return new CProductB2(); };
};
没什么实际意义.还是把书上那个迷宫的例子拿出来讨论吧.
meiZiNick
2008-05-01
打赏
举报
回复
有问题请先GOOGLE,BAIDU
knowledge_Is_Life
2008-04-30
打赏
举报
回复
接分是王道!
gunsand
2008-01-23
打赏
举报
回复
这个好象是抽象工厂的标准示例代码。我感觉如果PRODUCT 种类不多或者自己用的话。
完全可以写的简单点。。
WG_Wolf
2008-01-22
打赏
举报
回复
我也觉得跟 抽象工厂 离得比较远。
好像抽象工场是是解决由不同的搭配产生不同的产品,如果每一种都要写各类的话,
代码量不仅增大,而且不便于维护,用抽象工厂解决“组合爆炸”问题吧。
我觉的《设计模式》挺经典的,四人帮写的。
taodm
2008-01-18
打赏
举报
回复
很少很少有只单独使用一种厂的场合。一般都是几种厂方法联用来组成一个真正的厂的。
割裂开它们进行单独讨论没有太大意义。
michney
2008-01-18
打赏
举报
回复
> > 无需指定它们具体的类
唔,你的代码中
new CConcreteFactory1
new CConcreteFactory2
不是都明确指定了Factory?至于后来的 CreateProductA,最多说是隔离了具体类型的构造过程与调用代码的耦合,是Factory Method的优势,与Abstract Factory没什么关系吧?这个灵活性究竟在哪里?
=====================================================================================
这个问题可以用RTTI+配置文件来解决
cut9
2008-01-18
打赏
举报
回复
其实,是什么形式不重要。如果说 Design pattern里的定义是一种“标准”理解。那么,还有其他的理解和表现方式。
只要抓住一点,Abstract Factory 会导致:对 协议(或标准,或功能) 的实现,可以有很多版本,这多个版本的实现
有一个共同的接口,使用这个接口,可以取到每个版本的具体实现。
wanglovec
2008-01-13
打赏
举报
回复
Abstract Factory没什么关系吧?这个灵活性究竟在哪里?
> > 可以很容易增加产品系列,但对增加单个产品无能为力(工厂方法可以解决)
》》更正 可以很容易增加族,但 对增加产品等级无能为力
wanglovec
2008-01-13
打赏
举报
回复
Abstract Factor适用以下情况
1 客户 不依赖产品类实例如何实现
2 使用多个产品族中一族
3 产品之间有逻辑关联
wanglovec
2008-01-13
打赏
举报
回复
Abstract Factory没什么关系吧?这个灵活性究竟在哪里?
>>可以很容易增加产品系列,但对增加单个产品无能为力(工厂方法可以解决)
BlueGenie
2008-01-12
打赏
举报
回复
>>abstract factory 模式是运用c++的特性:继承性和多态性来完成的一个设计
抽象、封装、继承、多态是面向对象的基本特征。抽象封装了变化、封装隐藏了细节、
继承扩展了功能、多态定制了行为。
个人觉得abstract factory的要点还在于通过单个对象的替换实现了整个产品系列的替换。
加载更多回复(12)
设计模式
讨论
之
abstract
factory
篇
本文
讨论
了
Abstract
Factory
设计模式。介绍了使用设计模式的目的是减小耦合和提高复用,指出该模式内部仍有耦合,其好处是封装产品类型信息和创建复杂性,但弹性有限,若产品改变致接口变化,客户类代码也需改变。
设计模式
讨论
之
abstract
factory
篇 (转)
本文探讨了抽象工厂设计模式的核心理念及其实现方式。通过减少耦合性和提高代码复用性来提升软件系统的灵活性。文中详细解释了为何选择使用抽象工厂模式,并分析了其在实际应用中的优缺点。
设计模式--Prototype
本文深入解析了对象拷贝模式及其深拷贝、浅拷贝的区别,并介绍了创建型模式,如
Factory
、
Abstract
Factory
、Builder和Prototype。重点
讨论
了如何通过延迟具体实现操作至子类中来构建复杂对象。
讨论
创建基于WSE的报表打印服务及其实现
本文
讨论
创建基于WSE的报表打印服务及其实现。采用XML形式数据,客户端传数据和参数给服务器,服务器生成图片返回。服务器端用
Abstract
Factory
设计模式,客户端工作简单。还提及注意事项,该方式扩展方便,数据采集多样。
模式及实现
5,529
社区成员
4,167
社区内容
发帖
与我相关
我的任务
模式及实现
C/C++ 模式及实现
复制链接
扫一扫
分享
社区描述
C/C++ 模式及实现
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章