Java 设计模式 Factory Method 工厂方法 模式
Factory Method模式用于在父类中定义实例的生产方式,具体的处理全部交个子类负责,父类不生成具体的类。
涉及到的角色
- 产品:抽象类定义了模式中生产的那些实例所持有的接口,但具体的处理有子类具体的产品负责。
- 创建者:负责生成产品角色的抽象类。
- 具体的产品:负责具体的产品。
- 具体的创建者:负责生产具体的产品。
public abstract class Product {
public abstract void use();
}
public abstract class Factory {
protected abstract Product createProduct(String orderName);
public final Product create(String orderName) {
return createProduct(orderName);
}
}
public class Mooncakes extends Product {
private String mooncakeName;
Mooncakes(String mooncakeName) {
System.out.println("生产 " + mooncakeName + " !");
this.mooncakeName = mooncakeName;
}
@Override
public void use() {
System.out.println("吃 " + mooncakeName + " !");
}
}
public class MooncakesFactory extends Factory {
@Override
protected Product createProduct(String mooncakeName) {
return new Mooncakes(mooncakeName);
}
}
public class Cars extends Product {
private String carName;
public Cars(String carName) {
System.out.println("生产 " + carName + " !");
this.carName = carName;
}
@Override
public void use() {
System.out.println("驾驶 " + carName + " !");
}
}
public class CarsFactory extends Factory {
@Override
protected Product createProduct(String carName) {
return new Cars(carName);
}
}
public class Main {
public static void main(String[] args) {
Factory mooncakesFactory = new MooncakesFactory();
Product p1 = mooncakesFactory.create("五仁月饼");
Product p2 = mooncakesFactory.create("广式月饼");
p1.use();
p2.use();
Factory carsFactory = new CarsFactory();
Product p3 = carsFactory.create("猛登125");
Product p4 = carsFactory.create("宝马");
p3.use();
p4.use();
}
}
生产 五仁月饼 ! 生产 广式月饼 ! 吃 五仁月饼 ! 吃 广式月饼 ! 生产 猛登125 ! 生产 宝马 ! 驾驶 猛登125 ! 驾驶 宝马 !



