CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  架构、设计

关于简单工厂模式的问题,急急急急急急急!!!!!!!!!!!

楼主dengjian008(dj)2004-05-02 12:43:10 在 Java / 架构、设计 提问

通过简单工厂的接口可以拿到工厂的产品,但这个公共的接口里只能写公共的方法,那么这个接口拿到的产品只可以有公共的方法,我的问题是怎样才能使用接口拿到的产品拥有它所有的方法(共有的和私有的)???????????? 问题点数:0、回复次数:20Top

1 楼jeffyan77(jeffyan77)回复于 2004-05-02 13:22:15 得分 0

这个答案是每个人都知道的:向下类型转换。Top

2 楼dengjian008(dj)回复于 2004-05-02 20:52:47 得分 0

请回帖的各位举例说明!!!!!!!!!!!!!!多谢了Top

3 楼sean_gao(大胃 http://gaoyuxiang.cn/)回复于 2004-05-02 21:13:52 得分 0

public   class   TestFactory   {  
   
  public   static   IProduct   getProduct(int   id)   {  
  if   (id>0)   return   new   ProductA(id);  
  else   return   new   ProductB();  
  }  
   
  public   static   void   main(String[]   args)   {  
  IProduct   p1   =   getProduct(165);  
  IProduct   p2   =   getProduct(0);  
  p1.showYourID();  
  p2.showYourID();  
  ((ProductA)p1).showProductAStatus();  
  ((ProductB)p2).showProductBStatus();  
  }  
  }  
   
  interface   IProduct   {  
  public   void   showYourID();  
  }  
   
  class   ProductA   implements   IProduct   {  
  private   int   id;  
  ProductA(int   id)   {   this.id=id;   }  
  public   void   showYourID()   {  
  System.out.println("This   product   has   the   following   id:   "+   id+".");  
  }  
  public   void   showProductAStatus()   {  
  System.out.println("This   is   of   ProductA   type.");  
  }  
  }  
   
  class   ProductB   implements   IProduct   {  
  public   void   showYourID()   {  
  System.out.println("This   product   has   no   ID.");  
  }  
  public   void   showProductBStatus()   {  
  System.out.println("This   is   of   ProductB   type.");  
  }  
  }  
  Top

4 楼panpan221(我是来学习的!)回复于 2004-05-02 23:13:08 得分 0

新手学习Top

5 楼dengjian008(dj)回复于 2004-05-02 23:36:03 得分 0

感谢   sean_gao(大胃)   你的方法虽然达到了我的目的,可这样不是违背了工厂方法对其内部细类的封装特性了吗???望能再具体说明,再次感谢!!!!Top

6 楼sean_gao(大胃 http://gaoyuxiang.cn/)回复于 2004-05-03 00:11:56 得分 0

我随便写的例子,可能不够严谨。所谓工厂,就是把对象的构造/创建过程更大程度的掌握在我们自己手中。首先,你的设计要求更细的调用或者说对具体类型的依赖性比较强,所以我觉得所谓的工厂对细节的封装这个问题在这里讨论也许不大合适。其次,如果说我们需要强制用户通过我们的工厂获取对象实例而不是构造方法,我们需要对构造方法的访问修饰符作适当调整。在更多的时候也许我们应该多多考虑利用好多态而不是在运行期还需要对对象的具体类型进行判断。好了,说了一堆希望有点帮助,继续看球了。Top

7 楼dengjian008(dj)回复于 2004-05-03 10:09:10 得分 0

那么工厂方法可不可以,用一个接口而不用类型转换,拿到其产品的所有方法呢?Top

8 楼jkit(不再灌水)回复于 2004-05-03 11:00:42 得分 0

首先,你应该知道使用模式的目的,不是为了使用模式而使用模式!Top

9 楼dengjian008(dj)回复于 2004-05-04 09:42:31 得分 0

我只是想知道工厂可不可以,用一个接口而不用类型转换,拿到其产品的所有方法,只是学习,有谁能给我明确的答复,最好加上你的理由,谢谢~~~Top

10 楼programer23(亮子)回复于 2004-05-06 16:21:02 得分 0

当然可以,模式没有绝对的,只要满足开闭原则即可!Top

11 楼naomaomao(孬毛毛)回复于 2004-06-16 13:51:32 得分 0

顶Top

12 楼shuneng()回复于 2004-06-16 14:43:58 得分 0

用一个接口而不用类型转换,拿到其产品的所有方法  
  这样做的代价比较高感觉上,违返了依赖于接口的原则,这样使得工厂的实现与  
  使用都变得复杂。Top

13 楼Polarislee(北极星)(无房无车,飘在北京)回复于 2004-06-16 15:55:29 得分 0

如果你一定有这种需要,只能说你的封装设计的不甚合理。重新考虑一下吧Top

14 楼guorui_wh(Re)回复于 2004-06-16 16:37:44 得分 0

楼主说的是最大接口和最小接口的问题,如果这样的话,你可以把你的接口设计成最大的,就是说满足它所有的子类的方法.不过这样就会出现一个问题:可能有些方法对某一类产品不适合.解决的办法就是,没有办法两全.呵呵~~~Top

15 楼bluesage(海蓝色)回复于 2004-06-17 11:42:31 得分 0

Polarislee(北极星)   说的不错,如果你最后必须要进行类型转换的话,只能说你的设计、封装不合理。Top

16 楼0flying0(http://blog.itpub.net/wyyhzc)回复于 2004-06-17 16:24:51 得分 0

upTop

17 楼spiritmonger(祥子)回复于 2004-06-17 18:49:02 得分 0

要所有的方法那就做最大的接口了,不过那么做真的有意义么?  
  Top

18 楼armorking2003(阿墨)回复于 2004-06-18 09:13:21 得分 0

先定义一个最大的接口  
  再给它提供一个缺省的实现  
  之后,所有的产品都继承这个缺省实现类Top

19 楼sky_max(sky)回复于 2004-06-23 13:51:09 得分 0

1、向下类型转换  
  2、在定义产品接口时,定义所有的方法Top

20 楼wdong18(东东)回复于 2004-06-23 19:32:27 得分 0

这个是工厂方法的缺点,如果你看过设计模式这本书,再回头看一看相应章节,那里有比较科学的解决方式.Top

相关问题

  • 模式问题,急!急!急!
  • 急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急
  • 急急急急急急急急急急~~~~~~~~~~~~~~~~~~~~~~~~~~~!!!!!!
  • 急急急急急急急急急急!
  • 急急急急急急急急急急!!!!!!!
  • 急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!
  • 急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急,VB菜鸟问,急急急急急急急急急急急急急急急急急急急急急急急急急急急急
  • 急!急!急!急!急!急!急!
  • 急急急急急急急??????
  • 急!急!急!急!急!急!急!

关键词

  • 接口
  • 模式
  • 转换
  • 工厂
  • 急急
  • showyourid
  • iproduct
  • 方法
  • producta
  • productb

得分解答快速导航

  • 帖主:dengjian008

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo