请教工厂方法的问题。

02-10-09 hotdog
    

我看了天极网http://www.yesky.com/20011128/207301_2.shtml里工厂方法的例子,对其有点疑问,工厂方法确实能够产生很多实例,但这些实例的很多特性都被淹没了,如何使用这些实例呢?

apple为什么要实现FruitIF和PlantIF两个接口?

Fruit和Veggie不都是Plant的一个种类吗?

我认为这样做较妥当

interface PlantIF{

void grow();

void harvest();

void plant();

}

interface FruitIF extends PlantIF{}

interface VeggieIF extends PlantIF{

void pesticideDust();

}

但这样做的结果是用工厂方法产生的apple和tomato只有PlantIF的特征,如何获得tomato.pesticideDust()??

    

hotdog
2002-10-09 14:35

还有结合抽象工厂来说

Gardener就是它的抽象工厂?

FruitGardener、VeggieGardener是它的工厂方法??

banq
2002-10-09 22:16

那个例子从我个人来说,我认为很复杂,容易令人误解。

我一直认为讲解设计模式的例子一定要具备两个特点;

1.例子本身不能具有专业背景,否则读者理解例子时还需要了解专业背景。

2.例子也不能举一些太常识的东西,比如蔬菜 水果,平时接触中没有那么多复杂的概念,你一定在其中搞个什么工厂模式来,一般人都要范疑惑:平常我没想这么复杂阿,而且熟悉的东西各人理解可能不一样。

上面你那样理解我觉得也可以。

工厂方法很简单,经常和classLoad使用,抽象工厂一般系统不容易碰到,所以甭费劲了解他们到底差别有多大。