• 详谈 Java工厂 ---工厂方法模式


    1.前言

      有个场景,消费者需要付钱,有可能是使用支付宝、微信、银行卡,那么该怎么选择呢?

    是不是想到了使用用if else判断?还是使用switch?

      一个地方这样写还好,如果有很多这样的业务,难道都写一遍?我不想重复轮子,因此可以将他们都封装好,可以使用工厂模式将他们封装。

     什么是工厂模式?

      就是为了尽可能将代码的耦合度降低而产生的设计模式。

      这篇随笔讲解 工厂方法模式 的思路和具体操作。

    2.总结

    (1)工厂方法模式与静态工厂十分相似,甚至说思路基本一样,只是通过传入参数来选择不同的操作而已。
    (2)是在静态工厂的基础上改进的模式。
    (3)消费者只需要将关键词传给工厂,由工厂决定返回的内容。 (
    4)优点:将相似的业务集成在一起,使用基本一样的操作完成不同的业务。 (5)缺点:如果需要修改业务,需要修改工厂内容,耦合度太高了。

    3.操作

    (1)目录结构

      

     (2)建一个食物接口【规定了允许对食物的操作方法】

    package com.example.javabaisc.factory.staticfactory.origin;
    
    public interface Food {
        public void getFood();
    }
    View Code

    (3)两个食物接口的实现类【分别是苹果和面条】

    package com.example.javabaisc.factory.staticfactory.origin;
    
    public class Apple implements Food {
        @Override
        public void getFood() {
            System.out.println("apple");
        }
    }
    View Code
    package com.example.javabaisc.factory.staticfactory.origin;
    
    public class Noodles implements Food {
        @Override
        public void getFood() {
            System.out.println("Noodles");
        }
    }
    View Code

    (4)工厂类【决定生产什么食物】

    package com.example.javabaisc.factory.staticfactory.factory;
    
    import com.example.javabaisc.factory.staticfactory.origin.Apple;
    import com.example.javabaisc.factory.staticfactory.origin.Food;
    import com.example.javabaisc.factory.staticfactory.origin.Noodles;
    
    public class FoodFactory {
        public static String FF_Apple = "apple";
        public static String FF_Noodles = "noodles";
    
        public static Food getFood(String key) {
            if (key.equals(FF_Apple)) {
                return new Apple();
            } else if (key.equals(FF_Noodles)) {
                return new Noodles();
            } else {
                System.out.println("没有这种食物");
                return null;
            }
    
        }
    
    }
    View Code

    (5)测试类

    package com.example.javabaisc.factory.staticfactory;
    
    import com.example.javabaisc.factory.staticfactory.factory.FoodFactory;
    import com.example.javabaisc.factory.staticfactory.origin.Food;
    import org.junit.jupiter.api.Test;
    
    public class StFTest {
        @Test
        public void t(){
    
            //从工厂获取苹果
            Food food = FoodFactory.getFood(FoodFactory.FF_Apple);
            if (food != null){
                food.getFood();
            }
            //从工厂获取面条
            Food food2 = FoodFactory.getFood(FoodFactory.FF_Noodles);
            if (food2 != null){
                food2.getFood();
            }
    
        }
    
    }
    View Code

    (6)运行,打印结果

  • 相关阅读:
    个人作业2——英语学习APP案例分析
    结对编程1—— 基于界面的四则运算(38/39)
    个人作业1——四则运算题目生成
    软件工程实践项目课程的自我目标
    IE6/IE7/IE8/Firefox/Chrome/Safari的CSS hack兼容一览表
    微信小程序爬坑日记之蜜汁缩进
    微信小程序爬坑日记之背景图片设置
    你不知道的 js 保留字
    微信小程序爬坑日记之下拉刷新
    ES7-Es8 js代码片段
  • 原文地址:https://www.cnblogs.com/c2g5201314/p/13150194.html
Copyright © 2020-2023  润新知