factory method 模式:模板方法模式+简单工厂模式,简单工厂模式稍微复杂一点的变种;
场景:
- 我们现在要生产的产品有很多种;
- 每种产品的生产过程,都是一些共同的逻辑,但是也有一些是特殊的逻辑;
- 现在要生产出来各种产品;
一般就是在有复杂工厂生产场景的情况下,比如就是需要多种工厂生产不同的产品,但是产品都是类似的,同时不同的工厂有一定的相同逻辑,那么就用这种模式
;
平时在项目中使用相对频率较低;
package com.example.designpattern.factory;public class FactoryMethodPatternDemo {public static void main(String[] args) {Product product1 = Product1Factory.get().createProduct();Product product2 = Product2Factory.get().createProduct();Product product3 = Product3Factory.get().createProduct();product1.execute();product2.execute();product3.execute();}public interface Product {void execute();}public static class Product1 implements Product {public void execute() {System.out.println("产品1的功能逻辑");}}public static class Product2 implements Product {public void execute() {System.out.println("产品2的功能逻辑");}}public static class Product3 implements Product {public void execute() {System.out.println("产品3的功能逻辑");}}public static abstract class AbstractProductFactory{public Product createProduct(){commonCreate();return specificCreate();}private void commonCreate(){System.out.println("生产产品的通用逻辑...");}public abstract Product specificCreate();}public static class Product1Factory extends AbstractProductFactory{public static final Product1Factory instance = new Product1Factory();public static Product1Factory get(){return instance;}public Product specificCreate() {System.out.println("生产产品1的特殊逻辑");return new Product1();}}public static class Product2Factory extends AbstractProductFactory{public static final Product2Factory instance = new Product2Factory();public static Product2Factory get(){return instance;}public Product specificCreate() {System.out.println("生产产品2的特殊逻辑");return new Product2();}}public static class Product3Factory extends AbstractProductFactory{public static final Product3Factory instance = new Product3Factory();public static Product3Factory get(){return instance;}public Product specificCreate() {System.out.println("生产产品3的特殊逻辑");return new Product3();}}}
