2.可以使客户端不知道声明的类是什么?那你连你自己要调用哪个类都不知道,那可能吗?而且你不知道是哪个类你调它干嘛?肯定知道有什么用才调啊应该这样理解:客户端不用像传统的方法那样import具体的类,而可以通过类的名称直接得到需要的类,这样你可以把类的名称写在例如配置文件里面,以后系统需要扩充的时候,就可以只要修改配置文件,而不用去修改客户端的类。

解决方案 »

  1.   

    工厂方法是对每个产品实例都要有创建的对应的类,那也就是说你辨别每个具体的产品类改为了辨别具体的工厂创建的实例类,那这个效果不是一样,反而是多了中间一道吗?fruit a=new apple();
    fruit b=new orange();
    改为:
    fruit a=concreteCretor1.factor()
    fruit a=concreteCretor2.factor()一样得知道concreteCretor1=apple,concreteCretor2=orange,这个首先我觉得客户是需要知道具体类是什么的,不然不知道调哪个,其次,当加入新类时,客户端不是下面这样的吗?简单工厂模式还能说在配置里加,但工厂方法又怎么去配置?fruit c=new grape();这个和下面有什么区别?fruit a=concreteCretor3.factor()
      

  2.   

    1. 工厂的更换,是通过要配置文件的配置的。
    2. 配置的写法是有一定的规则的。一般是写类的全名,带包名一起。用途是反射,LZ反射要是都没搞明白那么工厂模式是肯定理解的不透彻的。
    3. 一般都有默认的工厂,如果你选择生产苹果,那么先要配置好苹果,set苹果,如果要香蕉当然要先set香蕉。这也是为什么一般工厂模式中产生工厂都会有两个方法,一个是没有参数的,一个是传String的。