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

最普通的常用模式,是在基类中使用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);
}
}
///:~

static我不会自觉地去使用它,我更喜欢非static使用:


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

static 或sinleton其实是反模式的,实战中不推荐使用,可以看看PicoContainer的文本中的片断。

这个问题,您说的不错,也许从理论上来说确实如此。
而且,写在这里有点不太恰当。

不过,我们公司做的都是中小型的项目,这样的话,使用static方法
比如生成订单的话。可以非常清晰的使用这种简单工厂方法来生成处理对象,甚至我们还用了final。

我想简单方法的本意就是要使用简单吧,所以我就这么用了!
因为Gof的模式的研究我还没有完,所以反模式这本书,我还没有看。

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



我们公司做的都是中小型的项目,这样的话,使用static方法
比如生成订单的话。可以非常清晰的使用这种简单工厂方法来生成处理对象,甚至我们还用了final。

我想简单工厂方法的本意就是要使用简单吧,所以我就这么用了!
因为Gof的模式的研究我还没有完,所以反模式这本书,我还没有看。

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

这个问题,您说的不错,从理论上来说确实如此。
而且,写在这里有点不太恰当。


tbase 想多了,言重了。

static方法确实好用,那就先用吧,知道其一些问题就可以。