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);
}