factory method 模式:模板方法模式+简单工厂模式,简单工厂模式稍微复杂一点的变种;

    场景:

    • 我们现在要生产的产品有很多种;
    • 每种产品的生产过程,都是一些共同的逻辑,但是也有一些是特殊的逻辑;
    • 现在要生产出来各种产品;

    一般就是在有复杂工厂生产场景的情况下,比如就是需要多种工厂生产不同的产品,但是产品都是类似的,同时不同的工厂有一定的相同逻辑,那么就用这种模式 ;

    平时在项目中使用相对频率较低;
    image.png

    1. package com.example.designpattern.factory;
    2. public class FactoryMethodPatternDemo {
    3. public static void main(String[] args) {
    4. Product product1 = Product1Factory.get().createProduct();
    5. Product product2 = Product2Factory.get().createProduct();
    6. Product product3 = Product3Factory.get().createProduct();
    7. product1.execute();
    8. product2.execute();
    9. product3.execute();
    10. }
    11. public interface Product {
    12. void execute();
    13. }
    14. public static class Product1 implements Product {
    15. public void execute() {
    16. System.out.println("产品1的功能逻辑");
    17. }
    18. }
    19. public static class Product2 implements Product {
    20. public void execute() {
    21. System.out.println("产品2的功能逻辑");
    22. }
    23. }
    24. public static class Product3 implements Product {
    25. public void execute() {
    26. System.out.println("产品3的功能逻辑");
    27. }
    28. }
    29. public static abstract class AbstractProductFactory{
    30. public Product createProduct(){
    31. commonCreate();
    32. return specificCreate();
    33. }
    34. private void commonCreate(){
    35. System.out.println("生产产品的通用逻辑...");
    36. }
    37. public abstract Product specificCreate();
    38. }
    39. public static class Product1Factory extends AbstractProductFactory{
    40. public static final Product1Factory instance = new Product1Factory();
    41. public static Product1Factory get(){
    42. return instance;
    43. }
    44. public Product specificCreate() {
    45. System.out.println("生产产品1的特殊逻辑");
    46. return new Product1();
    47. }
    48. }
    49. public static class Product2Factory extends AbstractProductFactory{
    50. public static final Product2Factory instance = new Product2Factory();
    51. public static Product2Factory get(){
    52. return instance;
    53. }
    54. public Product specificCreate() {
    55. System.out.println("生产产品2的特殊逻辑");
    56. return new Product2();
    57. }
    58. }
    59. public static class Product3Factory extends AbstractProductFactory{
    60. public static final Product3Factory instance = new Product3Factory();
    61. public static Product3Factory get(){
    62. return instance;
    63. }
    64. public Product specificCreate() {
    65. System.out.println("生产产品3的特殊逻辑");
    66. return new Product3();
    67. }
    68. }
    69. }