创建模式的作用是象new 一样创建一个对象。
工厂模式:定义一个创建对象的接口,但是子类决定创建哪个对象。工厂方法让类的创建在子类中进行
Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses. [GoF, p107]
首先假设我们可能需要两种产品( Product)对象,但并不要知道他们是怎么创建的,我们只知道有两个工厂会分别生产。

两个工厂都继承或实现抽象工厂,都有生产产品的方法。

用UML图整理手稿

接下来用JAVA实现:
一般都先创建工厂再调用,而我们真正关心的是怎么调用。所以我们先看Client怎么得到产品对象
package org.benewu.patterns.factoryMethod;

public class Client {
public static void main(String[] args) {
Factory factory = null;
factory = new ConcreteFactoryOne();
System.out.println(factory.makeProduct().getName());
factory = new ConcreteFactoryTwo();
System.out.println(factory.makeProduct().getName());
}
}
定义抽象工厂
package org.benewu.patterns.factoryMethod;

public abstract class Factory {

public abstract Product makeProduct();
}
两个具体工厂继承抽象工厂,提供具体产品
package org.benewu.patterns.factoryMethod;

public class ConcreteFactoryOne extends Factory {

@Override
public Product makeProduct() {
return new ProductOne();
}

}
package org.benewu.patterns.factoryMethod;

public class ConcreteFactoryTwo extends Factory {

@Override
public Product makeProduct() {

return new ProductTwo();
}

}
最后也就是我们想要的产品,
首先定义抽象产品
package org.benewu.patterns.factoryMethod;

public abstract class Product {
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}
接下来实现产品
package org.benewu.patterns.factoryMethod;

public class ProductOne extends Product {

public ProductOne(){
setName("org.patterns.factoryMethod.ProductOne");
}
}
package org.benewu.patterns.factoryMethod;

public class ProductTwo extends Product {

public ProductTwo(){
setName("org.patterns.factoryMethod.ProductTwo");
}
}
你觉得工厂方法怎么样?有什么应用吗?
-----------
参考资料:
http://home.earthlink.net/~huston2/dp/patterns.html
http://www.jdon.com/designpatterns/index.htm
工厂模式:定义一个创建对象的接口,但是子类决定创建哪个对象。工厂方法让类的创建在子类中进行
Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses. [GoF, p107]
首先假设我们可能需要两种产品( Product)对象,但并不要知道他们是怎么创建的,我们只知道有两个工厂会分别生产。

两个工厂都继承或实现抽象工厂,都有生产产品的方法。

用UML图整理手稿

接下来用JAVA实现:
一般都先创建工厂再调用,而我们真正关心的是怎么调用。所以我们先看Client怎么得到产品对象
















定义抽象工厂







两个具体工厂继承抽象工厂,提供具体产品
























最后也就是我们想要的产品,
首先定义抽象产品














接下来实现产品


















你觉得工厂方法怎么样?有什么应用吗?

-----------
参考资料:
http://home.earthlink.net/~huston2/dp/patterns.html
http://www.jdon.com/designpatterns/index.htm