您的位置:首页 > 其它

Design Pattern_Factory Method(工厂模式)

2013-04-30 20:42 323 查看
Factory Method
意图:定义 一个用于创建对象的接口,让子类决定实例化那一个类。将实例化延迟到其子类
问题:一个类需要实例化另一个类的派生类,但不知道具体的是哪个派生类。Factory Method允许让派生类来做出决定。
解决意图:一个派生类对“实例话那个类,如何实例化”的问题做出决定。
参与者与协作者:Product是Factory Method模式创建的对象的类型接口。Creator是定义工厂方法的接口。
效果:客户将需要Creator的子类来创建一个特定的ConcreteProduct对象。
实现:在抽象类中使用一个抽象方法(C++中的纯虚函数)。抽象类的代码把这个方法延迟到需要实例化一个被包含对象的时候,抽象类不知道需要哪个特定对象。




这个类图中有一个abstract的Creator类,更像一个抽象工厂,如果有多个Factory,各个factory生产方式不同的话是有必要有个abstract factory的,一般情况下直接用一个factory就行了、

举个例子

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package factory;

/**
*
* @author blacklaw
*/
public class Factory {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
MammalFactory.create(MammalFactory.MAMMAL.CAT).bark();
MammalFactory.create(MammalFactory.MAMMAL.DOG).bark();
}

/**
* Factory
*/
static class MammalFactory{
//selector
static public enum MAMMAL{
CAT,
DOG,
}
static public Mammal create(MAMMAL M){
switch(M){
case CAT: return new Cat();
case DOG: return new Dog();
}
return new Dog();
}
}
//base Mammal
abstract class Mammal{
abstract void bark();
}
//DOG
static class Dog extends Mammal{

@Override
void bark() {
System.out.println("Wang Wang");
}

}
//CAT
static class Cat extends Mammal{

@Override
void bark() {
System.out.println("Miao Miao");
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: