模式新手的FACTORY看法。请指点

FACTORY
建立一个专门生产keyboard(键盘)的工厂
public class Factory{
  public static Keyboard creator(int which){
   //为什么用static?
  if (which==1)
    return new keyboardBig();大键盘,成年人用
  else if (which==2)
    return new keyboardSmall();小键盘,小学生用
  }
}

Abstract Factory
现在工厂做大了,不只生产键盘,甚至要出成品电脑了
public abstract class Factory{
  public abstract Keyboard createKeyboard();
  public abstract CPU creatorCPU (String name); //参数为了选择产品有更的的灵活性。是否需要根据实际情况。
}
public class ArmyFactory extends Factory{//生产面向军工的产品。。
  public Keyboard createKeyboard (){
    .........
    return new KeyboardArmy() //军工键盘。
  }
public CPU createCPU (String name){ //军用 Intel 或 AMD CPU

    if……. return IntelArmy
   else return AMDArmy
 }
}
public class PeopleFactory extends Factory{//生产面向群众的产品。
  public Keyboard createKeyboard(){
    ......
    return new Keyboard //普通键盘。
  }
  public CPU createCPU (String name){
    if……. return Intel
    else return AMD //普通Intel or AMD CPU
  }
}

这是我第二便看完banq 的写的设计模式,也参考GOF的那本书。

上面的代码是我根据banq的改的,(没别的意思,发在这里是向和大家
讨论。因为我是个新手,,,不感肯定自己,,想法,,,SO 请
banq和大家给指点一下)不好意思。

希望能说说自己真正的看法,让我们共同进步。

static 是必须用的吗?

类的static变量和方法,是被所有它生成的事例共响的。

在多线程里也一样吗?像Servlet中。
多个Servlet 线程中用上面的静态方法,,,如果多个线程同时访问是怎么处理的,

(每个线程同时访问,还是排队访问)

public class KeyboardFactory{
  public static Keyboard creator(int which){
   //static 必须吗?
  if (which==1)
    return new keyboardBig();大键盘,成年人用
  else if (which==2)
    return new keyboardSmall();小键盘,小学生用
  }
}

static我认为不是必须的,这是工厂的实例生成方式了。
整个代码好像还不错。

不过工厂目前使用范围很小,不再适合做架构模式。

我觉得你写的这些文章对我们新手是很好的指引。
说真的,我一开始看GOF的那本书真的看不懂。都是C++的代码。何况那么精练,
看了你的文章,之后我就找到感觉了。以后坚持把你的模式文章在看一边,而且对读JIVE论坛有好处。


OO-------不过工厂目前使用范围很小,不再适合做架构模式。

我现在对模式一知半解,是说现在设计代码更复杂了吗?
除了这23种。还要继续领会向AOP。。。之类的吗?

我以后会继续向你请教,

我琢磨了会,又有一些想法。

static 不是必须,我想最好有。因为在使用这个FACTORY类的时候
会方便些。(直接用static的方法,不用去生成FACTORY对象再调用方法了)


在多个线程中,同一时刻,调用public static Keyboard creator()
这个方法。是每个线程排队访问还是多个同时访问。
我的水平不太好,我觉得是
多个线程同一时刻,同时访问这个static.

这个是我猜的,拿不准。。。。。

使用static一般没有关系,如果对方法中没有写动作。
使用static比较方便,但是你如果把这个工厂模式重用在其他项目中,而且它们部署在同一容器中,就会有些问题。

总之,一开始不必拘泥,先用起来再说。

>我现在对模式一知半解,是说现在设计代码更复杂了吗?
设计模式总是发展的,在现在Web容器 EJB容器和微容器流行架构下,已经很少需要用Factory,特别象Jive里那种ForumFactory,属于架构模式,已经很少用。


谢谢banq