JiveJdon Community Forums
在线284人   首页   主题表   培训咨询   标签   精华   查搜   注册    登陆 RSS
首页 » 论坛 » 设计模式、框架和架构
???en_US.forumThreadPrev.name??? 上一主题
google yahoo 365Key网摘 CSDN网摘 添加到百度搜藏 POCO网摘 新浪ViVi 天极网摘
???en_US.forumThreadNext.name??? 下一主题
Go 共有 8 回复 / 1
 发表新帖子   回复该主题贴
追风

悄悄话
发表文章: 17
注册时间: 2002年09月13日 16:58
关于抽象工厂的一个问题? 2002年11月11日 10:39 到本帖网址 加入本帖到收藏夹 回复该主题
标签     
看了bang的抽象工厂介绍,有一个问题不清楚。还请大家帮忙解决一下:
bang的抽象工厂中指出如果有2种产品,并且每种产品又有不同的实现,可以使用抽象工厂模式,但按bang的介绍,如果后来再增加一种新的产品,那所有的类是不是都要修改。
lsj

悄悄话
发表文章: 34
注册时间: 2002年10月16日 08:52
Re: 关于抽象工厂的一个问题? 2002年11月11日 12:00 到本帖网址 加入本帖到收藏夹 回复该主题
使用抽象工厂需要两个接口:产品接口和工厂接口,我们是面向接口编程
新增加的产品要实现产品接口,其他类可以继续以原有方式工作
richardluopeng

悄悄话
发表文章: 71
注册时间: 2002年08月30日 15:52
Re: 关于抽象工厂的一个问题? 2002年11月12日 13:22 到本帖网址 加入本帖到收藏夹 回复该主题
工厂和抽象工厂是有区别的
jxb8901

悄悄话
发表文章: 117
注册时间: 2002年10月24日 13:16
Re: 关于抽象工厂的一个问题? 2002年11月13日 09:30 到本帖网址 加入本帖到收藏夹 回复该主题
但是Gof的设计模式中只提到Abstract Factory模式而没有什么Factory模式,
楼上指的是Factory Method吗? 这两者当然是不同的!
vic

悄悄话
发表文章: 26
注册时间: 2002年10月14日 14:25
Re: 关于抽象工厂的一个问题? 2002年11月21日 10:01 到本帖网址 加入本帖到收藏夹 回复该主题
简单点来说,假设我先定义了一套bbs的接口在那里
你以数据库存储的形式实现,这是一个产品
你也可以以文件存储的形式实现,这是另一个产品
同理,你可以实现多个产品,注意,产品之间只是
实现方式不同,接口都是一样的
crazyren

悄悄话
发表文章: 20
注册时间: 2002年11月26日 11:55
Re: 关于抽象工厂的一个问题? 2002年11月29日 09:54 到本帖网址 加入本帖到收藏夹 回复该主题
抽象工厂当然也有其限制,并不是万能的。
比如
产品分为两个等级结构 A 和 B,和两个产品族 1 和 2
/** 工厂接口 */
public interface Creator {
public ProductA factoryA();
public ProductB factoryB();
}
/** 具体工厂1 */
public class ConcreteCreator1 implements Creator {
public ProductA factoryA() { return new ProductA1();}
public ProductB factoryB() { return new ProductB1();}
}
/** 具体工厂2 */
public class Factory2 implements Factory {
public ProductA factoryA() { return new ProductA2();}
public ProductB factoryB() { return new ProductB2();}
}
/** 产品接口A */
public interface ProductA { }
/** 产品接口B */
public interface ProductB { }
/** 具体产品A1 */
public class ProductA1 implements ProductA {
public ProductA1() {}
}
/** 具体产品A2 */
public class ProductA2 implements ProductA {
public ProductA2() {}
}
/** 具体产品B1 */
public class ProductB1 implements ProductB {
public ProductB1() {}
}
/** 具体产品B2 */
public class ProductB2 implements ProductB {
public ProductB2() {}
}
如果系统添加一个新的产品族,比如说 3 ,是很方便的。
但是如果在每个产品族中,添加一个新的产品等级,比如说 C ,那么,很显然,抽象工厂模式无能为力了。
(例子摘自java与模式一书),我对自己这种理解也不是很有把握,呵呵,希望版主能有更好的讲解。
crazyren

悄悄话
发表文章: 20
注册时间: 2002年11月26日 11:55
Re: 关于抽象工厂的一个问题? 2002年11月29日 10:04 到本帖网址 加入本帖到收藏夹 回复该主题
而且最恼火的是,我分辨不出工厂和抽象工厂的差别,我总认为如果给工厂模式新添加一个产品族,就自然的成了抽象工厂。请板桥先生能给讲讲吗。
浮舟

悄悄话
发表文章: 27
注册时间: 2002年11月27日 14:08
Re: 关于抽象工厂的一个问题? 2002年11月29日 13:51 到本帖网址 加入本帖到收藏夹 回复该主题
我记得看的阎宏发表在天极网上的文章上举的例子挺好的,他以一个后花园为例讲解的:
(工厂模式有简单工厂模式,工厂方法模式和抽象工厂模式几种形态。)

一开始只在后花园中种蔬菜类的时候可以用简单工厂模式,由工厂负责生成具体的蔬菜类,

但是如果后花园要引进水果类的时候简单模式就行不通了,因此需要使用工厂方法模式,将产品类族分开。

但是如果后花园的规模继续扩大到地域范围的分割时,比如说一个在北京,一个在上海的时候,工厂方法模式就不够了,因为对两个后花园来说,每个后花园的植物是要被种在一起的,并且两个后花园用工厂方法模式是无法体现其区别的。

我个人认为抽象工厂和工厂方法的最大区别应该是抽象工厂提取了各个工厂方法的共性,并且能够确保工厂方法中产生的产品类能够在一起工作。
而且我觉得向上面所说的加入一个产品c,这应该是去修改抽象产品类,而与工厂无关。

呵呵,不知道我的理解对不对,但我还是建议大家先去看看阎宏的文章,联接如下:

[url]http://www.yesky.com/20011114/205122_2.shtml[/url]
浮舟

悄悄话
发表文章: 27
注册时间: 2002年11月27日 14:08
Re: 关于抽象工厂的一个问题? 2002年11月29日 13:53 到本帖网址 加入本帖到收藏夹 回复该主题
为什么url不能显示成超连接啊,版本为什么不用微软提供的控件实现可视化编辑那?
标签     
共有 8 回复 / 1Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG:
正在读取,请等待...
查询本论坛内 回复超过的热门帖子
标题
 
粗体: [b]文本[/b] 斜体: [i]文本[/i] 下划线 [u]文本[/u] 插入图片 [img]http://wwww.xxxx.com/img.ext[/img] 插入代码 [code]程序代码[/code]  插入url链接 [url]http://url[/url] / [url=http://url]URL加下滑线[/url] 插入附件 插入word文档 Txt等文件
内容
  提交时自动拷贝以上内容到剪贴板 Ctrl-V可取出;提问题前先查询标签列表

RSS 手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的企业软件社区 推荐Chrome快速浏览本站
OpenSource JIVEJDON v3.5 Powered by JdonFramework Code © 2002-09 jdon.com

anti spam