工厂设计模式

简介: 工厂设计模式

Spring框架的概述

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/

在这里插入图片描述

2.什么是设计模式

  • 广义概念

    • 面向对象设计中,解决特定问题的经典代码
    • 狭义概念

      • GOF4人帮定义的23种设计模式

3.工厂设计模式

3.1什么是工厂设计模式

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

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

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

  • 耦合:指的是代码之间的强关联关系,一方的改变会影响另一方
  • 耦合带来的问题:不利于代码维护
  • 耦合我们可以简单理解,把接口的实现类,硬编码在程序中

    • 比如 Dao dao = new DaoImpl();
  • 通过工厂类我们可以实现解耦合

3.2简单工厂的设计

在这里插入图片描述
在这里插入图片描述

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方法

在这里插入图片描述
接下来我们就来想想要怎么才可以设计出一个通用的工厂类

我们想要写一个通用的方法来返回所有的类型,所以方法类型应该是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;
}

 

在这里插入图片描述

3.4通用工厂的使用方式

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

  • 第一步定义类
  • 第二步为了让工厂知道我们创建的类是哪一个类,所以我们可以通过配置文件的配置来告知工厂

    • 以key=value的形式
  • 第三步通过工厂来获得类的对象

    • Object obj=BeanFactory.getBean("key");实际开发中在这里根据具体的需要进行类型转换

4.总结

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

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

相关文章
|
7月前
|
设计模式 Java
设计模式之工厂
设计模式之工厂
|
1月前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
35 2
|
4月前
|
设计模式 JavaScript 前端开发
从工厂到单例再到策略:Vue.js高效应用JavaScript设计模式
【8月更文挑战第30天】在现代Web开发中,结合使用JavaScript设计模式与框架如Vue.js能显著提升代码质量和项目的可维护性。本文探讨了常见JavaScript设计模式及其在Vue.js中的应用。通过具体示例介绍了工厂模式、单例模式和策略模式的应用场景及其实现方法。例如,工厂模式通过`NavFactory`根据用户角色动态创建不同的导航栏组件;单例模式则通过全局事件总线`eventBus`实现跨组件通信;策略模式用于处理不同的表单验证规则。这些设计模式的应用不仅提高了代码的复用性和灵活性,还增强了Vue应用的整体质量。
66 1
|
4月前
|
设计模式 XML 数据格式
python之工厂设计模式
python之工厂设计模式
python之工厂设计模式
|
4月前
|
设计模式 测试技术
依赖注入与工厂设计模式的区别
【8月更文挑战第22天】
81 0
|
6月前
|
设计模式 Java 编译器
设计模式——创建型模式(工厂,简单工厂,单例,建造者,原型)
设计模式——创建型模式(工厂,简单工厂,单例,建造者,原型)
|
5月前
|
设计模式 Java 开发者
工厂设计模式的实现与应用场景分析
工厂设计模式的实现与应用场景分析
|
7月前
|
设计模式
设计模式之工厂 Factory
设计模式之工厂 Factory
64 1
|
7月前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
|
7月前
|
设计模式 Java Go
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式