• 设计模式面试系列-02


    1. Java 中工厂模式有什么优势?

    1、工厂模式是最常用的实例化对象模式,是用工厂方法代替new操作的一种模式。

    2、利用工厂模式可以降低程序的耦合性,为后期的维护修改提供了很大的便利。

    3、将选择实现类、创建对象统一管理和控制,从而将调用者跟我们的实现类解耦。

    2. 说说你理解的 Spring 中工厂模式?

    Spring IOC

    看过Spring源码就知道,在Spring IOC容器创建bean的过程是使用了工厂设计模式。

    Spring中无论是通过xml配置还是通过配置类还是注解进行创建bean,大部分都是通过简单工厂来进行创建的。

    当容器拿到了beanName和class类型后,动态的通过反射创建具体的某个对象,最后将创建的对象放到Map中。

    3. 为什么 Spring IOC 要使用工厂模式创建 Bean?

    在实际开发中,如果A对象调用B,B调用C,C调用D的话,程序的耦合性就会变高。耦合大致分为类与类之间的依赖,方法与方法之间的依赖。

    以前三层架构编程时,都是控制层调用业务层,业务层调用数据访问层时,都是是直接new对象,耦合性大大提升,代码重复量大、冗余高,对象也是创建比较随意。

    为了避免这种情况,Spring使用工厂模式编写一个工厂,由工厂创建Bean,以后如果要对象就直接管工厂要就可以。

    Spring IOC容器的工厂中有个静态的Map集合,是为了让工厂符合单例设计模式,即每个对象只生产一次,生产出对象后就存入到Map集合中,保证了实例不会重复影响程序效率。

    4. Java 中工厂模式分为哪几大类?

    工厂模式分为三类,如下:

    1)简单工厂模式(Simple Factory),又称静态工厂方法模式,是由一个具体的类去创建其他类的实例,父类是相同的,父类是具体的, 不利于产生系列产品;

    2)工厂方法模式(Factory Method),又称为多形性工厂是有一个抽象的父类定义公共接口,子类负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成;

    3)抽象工厂模式(Abstract Factory),又称为工具箱,提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。它针对的是有多个产品的等级结构,产生产品族但不利于产生新的产品,而工厂方法模式针对的是一个产品的等级结构。

    5. Java 中什么是简单工厂模式?

    简单工厂模式又称静态工厂方法模式,在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化,如同一个交通警察站在来往的车辆流中,决定放行那一个方向的车辆向那一个方向流动一样。

    简单工厂模式的具体组成如下:

    1)工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,用来创建产品。

    2)抽象产品角色:它一般是具体产品继承的父类或者实现的接口。

    3)具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。

    下面举例猫与狗吃饭的故事,具体代码实现如下:

    1)创建共用接口,代码如下:

    1. package com.yoodb;
    2. public interface Dinner{
    3. public void eat();
    4. }

    2)创建实现类,代码如下:

    1. package com.yoodb;
    2. public class CatDinner implements Dinner{
    3. @Override
    4. public void eat() {
    5. // TODO Auto-generated method stub
    6. System.out.println("小猫来吃饭了!");
    7. }
    8. }
    1. package com.yoodb;
    2. public class DogDinner implements Dinner{
    3. @Override
    4. public void eat() {
    5. // TODO Auto-generated method stub
    6. System.out.println("小狗来吃饭了!");
    7. }
    8. }

    3)创建工厂,代码如下:

    1. package com.yoodb;
    2. public class DinnerFactory {
    3. public Dinner produce(String animal){
    4. if(animal.equals("cat")){
    5. return new CatDinner();
    6. }else if(animal.equals("dog")){
    7. return new DogDinner();
    8. }else{
    9. System.out.println("请输入存在的动物!");
  • 相关阅读:
    LLM - SFT workflow 微调工作流程
    TS的安装及使用时遇到的问题
    JAVA的异常处理
    java基于Springboot+vue的购物电商平台设计与实现 elementui
    多层级数据的定时任务
    算法基础1.1 快速排序
    数据库 | 试卷五&试卷六&试卷七
    这应该是Linux用户与用户组最详细的知识了吧!
    软路由vs传统路由器ip:选择合适的网络设备
    Operator3-设计一个operator
  • 原文地址:https://blog.csdn.net/qq_61863348/article/details/136194578