Factory Method模式
第四章: 工厂模式
工厂模式所包含的角色:
1.Product(产品)
2.Creator(创建者)
3.ConcreateProduct(具体的产品)
4.ConcreateCreator(具体的创建者)
实现流程: 定义抽象产品(Product),在抽象产品(Product)中可以定义需要实现的抽象方法,工厂模式在使用中一般都是以多态形式使用,如:
Factory f = new XXXFactory("XXX"); f.xxx();
其中f.xxx();就是你在产品(Product)类中定义的方法,可以理解为你的产品造出来后,怎么去使用,那么就在这里定义。
接着还需要抽象工厂,这里用到了模板模式(Template),在抽象工厂类中都会有Create();这个方法,在这个方法中可以放入需要的参数,可以理解为在加工产品是需要用到的‘原料’!
如果用到工厂模式,那么在一般情况下都是有较为复杂逻辑,在Create()这个方法中就可以去进行产品的创建以及'加工'。
具体产品类是必须的,继承抽象产品(Product),其中关系就比如联想Thinkpad继承电脑这样,电脑有开机方法,那么Thinkpad去继承它。
具体工厂,抽象工厂只定义抽象方法,是具体工厂的父类,在具体工厂中再去进行new对象,完成在抽象工厂中定义的一系列流程。
Code:
抽象工厂:
package example.factory.method;
/**
* 用于生成Product类,并对Product进行"加工"
* @author Administrator
*
*/
public abstract class Factory {
public final Product create(String owner) {
Product p = createProduct(owner);
registerProduct(p);
return p;
}
protected abstract void registerProduct(Product p);
protected abstract Product createProduct(String owner);
}
抽象产品:
package example.factory.method;
/***
* 只定义抽闲方法的抽象类,use
* @author Administrator
*
*/
public abstract class Product {
public abstract void use ();
}
具体产品:
package example.factory.method;
/**
* 产品,继承Product类的use使用功能。
* @author Administrator
*
*/
public class IDCard extends Product{
private String owner;
@Override
public void use() {
System.out.println("使用了" + owner + "的ID卡");
}
IDCard(String owner){
System.out.println("制作" + owner + "的ID卡");
this.owner = owner;
}
public String getOwner() {
return owner;
}
}
具体工厂:
package example.factory.method;
import java.util.ArrayList;
import java.util.List;
public class IdCardFactory extends Factory{
private List<String> owners = new ArrayList<>();
@Override
protected void registerProduct(Product p) {
owners.add(((IDCard)p).getOwner());
}
@Override
protected Product createProduct(String owner) {
return new IDCard(owner);
}
}
package example.factory.method;
public class Main {
public static void main(String[] args) {
Factory factory = new IdCardFactory();
Product card1 = factory.create("测试");
card1.use();
}
}

浙公网安备 33010602011771号