最普通的常用模式,是在基类中使用static方法通过参数来创建。

04-03-27 tbase
最普通的常用模式,是在基类中使用static方法通过参数来创建。

//: factory:shapefact1:ShapeFactory1.java
import java.util.*;
import junit.framework.*;
 
abstract class Shape {
  public abstract void draw();
  public abstract void erase();
  public static Shape factory(String type) {
    if(type.equals("Circle")) return new Circle();
    if(type.equals("Square")) return new Square();
    throw new RuntimeException(
      "Bad shape creation: " + type);
  }
}
 
class Circle extends Shape {
  Circle() {} // Package-access constructor
  public void draw() { 
    System.out.println("Circle.draw"); 
  }
  public void erase() { 
    System.out.println("Circle.erase"); 
  }
}
 
class Square extends Shape {
  Square() {} // Package-access constructor
  public void draw() { 
    System.out.println("Square.draw"); 
  }
  public void erase() { 
    System.out.println("Square.erase"); 
  }
}
 
public class ShapeFactory1 extends TestCase  {
  String shlist[] = { "Circle", "Square", 
    "Square", "Circle", "Circle", "Square" };
  List shapes = new ArrayList();
  public void test() {
    Iterator it = Arrays.asList(shlist).iterator();
    while(it.hasNext())
      shapes.add(Shape.factory((String)it.next()));
    it = shapes.iterator();
    while(it.hasNext()) {
      Shape s = (Shape)it.next();
      s.draw();
      s.erase();
    }
  }
  public static void main(String args[]) {
    junit.textui.TestRunner.run(ShapeFactory1.class);
  }
} ///:~
<p>
    

banq
2004-03-31 09:14
static我不会自觉地去使用它,我更喜欢非static使用:

static太多,不利于模式嵌套组合使用。

banq
2004-04-06 09:20
static 或sinleton其实是反模式的,实战中不推荐使用,可以看看PicoContainer的文本中的片断。

tbase
2004-04-14 21:04
这个问题,您说的不错,也许从理论上来说确实如此。

而且,写在这里有点不太恰当。

不过,我们公司做的都是中小型的项目,这样的话,使用static方法

比如生成订单的话。可以非常清晰的使用这种简单工厂方法来生成处理对象,甚至我们还用了final。

我想简单方法的本意就是要使用简单吧,所以我就这么用了!

因为Gof的模式的研究我还没有完,所以反模式这本书,我还没有看。

也许,这就叫“无知者无畏”吧。呵呵,在中小项目中,我觉得还是蛮清晰和比较好维护的。

tbase
2004-04-14 21:05

我们公司做的都是中小型的项目,这样的话,使用static方法

比如生成订单的话。可以非常清晰的使用这种简单工厂方法来生成处理对象,甚至我们还用了final。

我想简单工厂方法的本意就是要使用简单吧,所以我就这么用了!

因为Gof的模式的研究我还没有完,所以反模式这本书,我还没有看。

也许,这就叫“无知者无畏”吧。呵呵,在中小项目中,我觉得还是蛮清晰和比较好维护的。

这个问题,您说的不错,从理论上来说确实如此。

而且,写在这里有点不太恰当。

猜你喜欢
2Go 1 2 下一页