程序的耦合:工厂模式解耦

public class JdbcDemo1{
	public static void main(String[] args){
	//1.注册驱动
	DriverManager.registerDriver(new com.mysql.jdbc.Driver());
	//2.连接操作
	Connection con = DriverManger.getConnection("jdbc:mysql://localhost:3306/eesy","root","password");
	//3.获取操作数据库的预处理对象
	PreparedStatment pstm = conn.preareStatement("select * from account");
	//4.执行SQL,得到结果集
	ResultSet rs = pstm.executeQuery();
	//5.遍历结果集
	while(rs.next()){
		System.out.println(rs.getString("name"));
	}
	//6.释放资源	
	rs.close();
	pstm.close();
	conn.close();
	}
}

我为什么一定要将com.mysql.jdbc.Driver()写出来,通常情况下我们都是采用导包的方式,当我们将mysql的jar包删掉,程序就会报错,这里就存在着程序的耦合。
耦合:耦合就是程序间的依赖关系
包括:
类之间的依赖
方法间的依赖
我们今天主要了解一下类之间的依赖,我们在程序中要有意识的解耦,即降低程序间的依赖关系。
我们在实际开发中应该做到:编译期不依赖,运行时才依赖。
以前我们注册驱动时会编译:

Class.forName(“com.mysql.jdbc.Driver”);
解耦的思路:
第一步:使用反射来创建对象,而避免使用new关键字。
第一种方法依赖具体的驱动类,不像第二种依赖字符串,从而减少了耦合。
第二步:通过读取配置文件来获取要创建的对象全限定类名。

/**
*一个创建Bean对象的工厂
*
*Bean:在计算机英语中、有可重用组件的含义。
*JavaBean:用java语言编写的可重用组件
*javabean>实体类
*
*它就是创建我们的service和dao对象的
*
*第一个:需要一个配置文件来配置我们的service和dao
*				配置的内容:唯一标识=全限定类名(key=value)
*第二个:通过读取配置文件中配置的内容,反射创建对象
*
* 我的配置文件可以是xml也可以是properties
*/
public class BeanFactory{
	//定义一个properties对象
	private static Properties props;

	//使用静态代码块Properties对象赋值
	static{
		try{
	//实例化对象
		props=new Properties();
		//获取properties文件的流对象
		InputStream in =BeanFactory.class.getClassLoader()
		.getResourcesAsStream("bean.properties");
		props.load(in);
		}catch(Exception e){
			throw new ExceptionInInitiazerError("初始化properties失败!");

		}
	}
	/**
	*根据bean名称获取bean对象
	*
	*/
	public Object getBean(String beanName){
		Object bean;
		try{
			String beanPath =props.getProperty(beanName);
			bean =Class.forName(beanPath).newInstance();
		}catch(Exception e){
			e.printStackTrace();
		}
			return bean;
	}
}

猜你喜欢

转载自blog.csdn.net/RacardoMlu/article/details/107758001