工厂设计模式

本文阅读 7 分钟
首页 代码,Java 正文

1.什么是Spring

Spring框架是一个轻量级的开源的Java开发框架,是为了解决企业应用开发的复杂性而创建的。可以在JavaSE和JavaEE中使用,整合了众多优秀的设计模式。

  • 轻量:
    - spring框架所引用的jar包比较少,而且 体积小,而且可以独立使用 - 对于运行环境没有额外要求,可以运行在开源的tomact服务器种,也可以运行在收费的weblogic,websphere - 代码移植性高,不需要实现额外的接口
  • 开源:免费
  • 整合设计模式
    - 工厂设计模式 - 代理设计模式 - 模板设计模式 - 策略设计模式 - …

Spring核心技术:

  • IOC(控制反转),把创建对象过程交给 Spring 进行管理
  • AOP(面向切面编程),不修改源代码进行功能增强

Spring又叫做容器,Spring作为容器,装的是Java对象,可以让Spring创建Java对象,给属性赋值

Spring的作用:实现解耦合,解决Java对象之间的耦合,解决模块之间的耦合。 既然这里说到了解耦合,那么我们肯定要知道耦合是什么意思。以我们写的代码来作为例子,耦合说的就是我们写的代码之间的关系性太高了,互相依赖,牵一发而动全身。接下来我通过代码来说明一下。

public class A{ 
        public int i;
    }

    public class B{ 
        public void add(A a){ 
            System.out.println(a.i);
        }
    }

我们可以发现B的代码依赖于A,如果A的代码发生改变,B的代码也会出现变化,我们应该尽量避免这样的情况发生,像我们之前在JavaSE所学到的接口,多态等都可以实现解耦合,我们写代码尽量让模块之间的关联少一点,不然可能一个模块出现错误,我们修改代码以后,导致其他的模块也要修改,这样就很繁琐了。

Spring 特点 (1)方便解耦,简化开发 (2)Aop 编程支持 (3)方便程序测试 (4)方便和其他框架进行整合 (5)方便进行事务操作 (6)降低 API 开发难度

Spring框架的官网 https://spring.io/

img

2.什么是设计模式

  • 广义概念
    - 面向对象设计中,解决特定问题的经典代码
  • 狭义概念
    - GOF4人帮定义的23种设计模式

3.工厂设计模式

3.1什么是工厂设计模式

工厂设计模式简单来说就是通过工厂类来创建对象 我们先来看看以前我们怎么创建对象的

User user=new User();
Student student = new Student();

我们以前都是通过new来创建对象,但是工厂设计模式不建议我们用new的方式来创建对象,而是希望我们通过工厂类来创建对象。 这就涉及到工厂的好处:解耦合 刚刚在上面已经说过耦合了,这里我就简单回顾一下 我们来看看耦合的概念

  • 耦合:指的是代码之间的强关联关系,一方的改变会影响另一方
  • 耦合带来的问题:不利于代码维护
  • 耦合我们可以简单理解,把接口的实现类,硬编码在程序中
    - 比如 Dao dao = new DaoImpl();
  • 通过工厂类我们可以实现解耦合

3.2简单工厂的设计

img img

package com.zyh.basic;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**工厂类 * @author zengyihong * @create 2022--04--14 0:15 */
public class BeanFactory { 
  private static Properties properties=new Properties();
  static { 
     第一步获得IO输入流
    InputStream inputStream = BeanFactory.class.getResourceAsStream("/UserService.properties");
    
     第二步 文件内容 封装到配置文件中
    try { 
      properties.load(inputStream);
    } catch (IOException e) { 
      e.printStackTrace();
    }finally { 
      if (inputStream !=null){ 
        try { 
          inputStream.close();
        } catch (IOException e) { 
          e.printStackTrace();
        }
      }
    }

  }
  public static UserService getUserService(){ 
    UserService userService=null;
    try { 
      Class clazz=Class.forName(properties.getProperty("userservice"));
        userService =(UserService) clazz.newInstance();

    } catch (ClassNotFoundException e) { 
      e.printStackTrace();
    } catch (InstantiationException e) { 
      e.printStackTrace();
    } catch (IllegalAccessException e) { 
      e.printStackTrace();
    }
    return  userService;
  }

  public static UserDao getUserDAO(){ 
    UserDao userDao=null;

    try { 
      Class clazz = Class.forName(properties.getProperty("userDao"));
      userDao = (UserDao)clazz.newInstance();
    } catch (ClassNotFoundException e) { 
      e.printStackTrace();
    } catch (InstantiationException e) { 
      e.printStackTrace();
    } catch (IllegalAccessException e) { 
      e.printStackTrace();
    }
    return userDao;


  }



}

3.3通用工厂的设计

我们可以看得出来,我们以后如果想要对一个类进行解耦合,就应该在工厂类中写相应的工厂方法,想要获得A类,就应该写getA方法

img 接下来我们就来想想要怎么才可以设计出一个通用的工厂类

我们想要写一个通用的方法来返回所有的类型,所以方法类型应该是Object,其实这里有一个比较烧脑筋的东西就是,我们并不知道用户想要创建哪一个对象,那么我们要怎么设计呢? 我们可以让调用者传参数过来,根据参数来创建对象 传入的参数是String类型,传入的是我们在配置文件中写的key

可以创建一切想要的对象
public static Object getBean(String key){ 
  Object obj=null;
  try{ 
    Class clazz=Class.forName(properties.getProperty(key));
    obj=clazz.newInstance();
  }catch(Exception e){ 
    e.printStackTrace();
  }
  return obj;
}

img

3.4通用工厂的使用方式

我们定义通用工厂实际上是为了来创建对象

  • 第一步定义类
  • 第二步为了让工厂知道我们创建的类是哪一个类,所以我们可以通过配置文件的配置来告知工厂
    - 以key=value的形式
  • 第三步通过工厂来获得类的对象
    - Object obj=BeanFactory.getBean(“key”);实际开发中在这里根据具体的需要进行类型转换

4.总结

Spring本质是工厂,不过这个工厂不需要我们来开发,Spring已经创建好这个工厂了,Spring创建的这个工厂叫ApplicationContext。

根据上面我们自己写的,我们可以看出来,除了工厂类以外,我们应该还要有配置文件,Spring中这个配置文件名字是applicationContext.xml

本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://zengyihong.blog.csdn.net/article/details/123999661
-- 展开阅读全文 --
安全面试之XSS(跨站脚本攻击)
« 上一篇 07-24

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复