关于简单工厂模式的问题,急急急急急急急!!!!!!!!!!!
通过简单工厂的接口可以拿到工厂的产品,但这个公共的接口里只能写公共的方法,那么这个接口拿到的产品只可以有公共的方法,我的问题是怎样才能使用接口拿到的产品拥有它所有的方法(共有的和私有的)???????????? 问题点数: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




