Factory Method 设计模式
一、Factoy Method 设计模式是什么?
上一篇中我们介绍了Template Method模式,我们使用Template Method模式构建专门生成实例的工厂,这种方式就被称为Factory Method 模式。在该模式中,父类决定实例的生成方式,但不会参与决定生成什么具体的类。需要生成什么样的具体类由父类的子类决定。
二、实例演示
1.Product
Product类为表示产品的抽象类,里面只定义了抽象方法。
public abstract class Product {
public abstract void use();
}
2.Bread
Bread类为Product的子类,实现了use方法。该类为实体类,是工厂要生产出的商品。
import lombok.Data;
@Data
public class Bread extends Product{
private String owner;
public Bread(String owner){
System.out.println("面包被生产");
this.owner = owner;
}
@Override
public void use() {
System.out.println("生产的是"+owner);
}
}
3.Factory
Factory类用于生产产品,里面也只实现了生产产品。而生产产品所需的具体方法是其子类所要完成的工作。
public abstract class Factory {
public final Product create(String owner){//生产产品的方法
Product product = createProduct(owner);
registerProduct(product);
return product;
}
//子类需实现的方法
protected abstract Product createProduct(String owner);
protected abstract void registerProduct(Product product);
}
4.BreadFactory
BreadFactory是Factory的子类,是专门生产Bread的工厂,也实现了Factory类中的抽象方法。
@Data
public class BreadFactory extends Factory{
private List<String> ownerList;
public BreadFactory(){
ownerList = new ArrayList<>();
}
@Override
protected Product createProduct(String owner) {
return new Bread(owner);
}
@Override
protected void registerProduct(Product product) {
ownerList.add(((Bread)product).getOwner());
}
}
5.结构图
三、测试
Main
public class Main {
public static void main(String[] args) {
Factory factory = new BreadFactory();
Product one = factory.create("全麦面包");
Product two = factory.create("奶酥面包");
one.use();
two.use();
}
}