Spring学习笔记八、Factory反射解决对象之间耦合

1、工厂设计模式

1)什么是工厂设计模式

详情见设计模式

概念:通过工厂创建对象
好处:解耦

对象的创建方式
1、直接调用对象的构造方法创建
Book book = new Book();
2、通过反射的形势创建对象


Class clazz = Class.forName("com.haoxiansheng.testdemo.Book");
Book book = (Book) clazz.newInstance();

测试

一、类
package com.haoxiansheng.spring5;

/**
 * @author haoxiansheng
 * @date 2020-06-01
 */
public class Book {
    private String name;

    private String athor;

    public Book() {
    }

    // 2、有参构造注入
    public Book(String name) {
        this.name = name;
    }

    // 1、set方法注入
    public void setName(String name) {
        this.name = name;
    }

    public void setAthor(String athor) {
        this.athor = athor;
    }

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", athor='" + athor + '\'' +
                '}';
    }

    public void print() {
        System.out.println(name + "==" + athor);
    }

}

package com.haoxiansheng.spring5.reflex;

import com.haoxiansheng.spring5.Book;

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

二、工厂类
/**
 * @author haoxiansheng
 * @date 2020-06-03
 */
public class BeanFactory {
    private static Properties env = new Properties();

    static {
        try {
            // 第一步获得IO 输入流
            InputStream inputStream = BeanFactory.class.getResourceAsStream("/application.properties");
            // 第二部文件内容封装到Properties 集合 key = book value = com.haoxiansheng.spring5.Book
            env.load(inputStream);
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public static Book getBook() {
        Book book = null;
        try {
            // 硬编码 耦合
            //Class clazz = Class.forName(env.getProperty("com.haoxiansheng.spring5.Book"));
            // 利用配置文件加载的方式解决耦合
            Class clazz = Class.forName(env.getProperty("book"));
            book = (Book) clazz.newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return book;
    }
}

三、配置文件 + 测试代码
# Properties 集合存储 Properties文件的内容
# 特殊Map key=String value=String
# Properties [book=com.haoxiansheng.spring5.Book]
# Properties.getProperty("book")  => 文件内容读取

book=com.haoxiansheng.spring5.Book



    @Test
    public void  testFactory() {
        Book book = BeanFactory.getBook();
        System.out.println(book);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值