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

05-07-05 belly
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和大家给指点一下)不好意思。

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

    

belly
2005-07-05 17:34
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();小键盘,小学生用

  }

}

banq
2005-07-05 21:11
static我认为不是必须的,这是工厂的实例生成方式了。

整个代码好像还不错。

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

belly
2005-07-05 22:47
我觉得你写的这些文章对我们新手是很好的指引。

说真的,我一开始看GOF的那本书真的看不懂。都是C++的代码。何况那么精练,

看了你的文章,之后我就找到感觉了。以后坚持把你的模式文章在看一边,而且对读JIVE论坛有好处。

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

我现在对模式一知半解,是说现在设计代码更复杂了吗?

除了这23种。还要继续领会向AOP。。。之类的吗?

我以后会继续向你请教,

belly
2005-07-06 00:01
我琢磨了会,又有一些想法。

static 不是必须,我想最好有。因为在使用这个FACTORY类的时候

会方便些。(直接用static的方法,不用去生成FACTORY对象再调用方法了)

在多个线程中,同一时刻,调用public static Keyboard creator()

这个方法。是每个线程排队访问还是多个同时访问。

我的水平不太好,我觉得是

多个线程同一时刻,同时访问这个static.

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

猜你喜欢
2Go 1 2 下一页