深入理解面向接口编程

深入理解面向接口编程:在类中调用接口的方法,而不必关心具体的实现。
这将有利于代码的解耦。 使程序有更好的可移植性和可扩展性。
1.CustomerSerlet 调用CustomerDAO  :

 

	//面向接口编程:Jdbc方式
	private CustomerDAO customerDAO=new CustomerDAOJdbcImpl();
	//面向接口编程:XML方式
	//private CustomerDAO customerDAO=new CustomerDAOXMLImpl();

2.动态修改Customer的存储方式:通过修改类路径下的switch.properties文件的方式来实现
XML方式
type=xml
JDBC方式 
type=jdbc
# 注释

1).CustomerServlet中不能再通过这样的方式写死实现类
private CustomerDAO customerDAO=new CustomerDAOJdbcImpl();
2).需要通过一个类的一个方法来获取具体的实现类的对象。
①.web.xml文件

 

<servlet>
  <display-name>InitServlet</display-name>
  <servlet-name>InitServlet</servlet-name>
  <servlet-class>com.zc.mvcapp.servlet.InitServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
  </servlet>

当前WEB应用才启动的时候initServlet被创建,并由Servlet容器调用init()方法;

 

   @Override
    public void init() throws ServletException {
    	CustomerDAOFactory.getInstance().setType("jdbc");
    	//读取类路径下的switch.properties文件
    	InputStream in =
    			getServletContext().getResourceAsStream("/WEB-INF/classes/switch.properties");
    	java.util.Properties properties=new java.util.Properties();
    	try {
			properties.load(in);
			//获取switch.properties的type属性值
			String type=properties.getProperty("type");
			//赋给了CustomerDAOFactory的type属性
			CustomerDAOFactory.getInstance().setType(type);
	} catch (Exception e) {		
			e.printStackTrace();
}

②.

 

public class CustomerServlet extends HttpServlet {
	private CustomerDAO customerDAO=CustomerDAOFactory.getInstance().getCustomerDAO();
创建CustomerServlet时,为CustomerDAO属性赋值是通过
CustomerDAOFactory的getCustomerDAO()方法完成的。
private CustomerDAOFactory(){
	daos.put("jdbc", new CustomerDAOJdbcImpl());
	daos.put("xml", new CustomerDAOXMLImpl());
}
public CustomerDAO getCustomerDAO(){
		return daos.get(type);
}

6.response.sendRedirect 可以避免表单的重复提交

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值