首先,使用接口編程是為了提高程序的可維護性和可伸縮性。如果你在一個類里使用組合調用另一個類時,你直接使用另一個具體的類,這樣的話你就不這個類寫死了,以后假如業務邏輯變化時,你就必須修改原代碼。你如果寫的是一個接口,當業務邏輯變化時你只需寫一個新的類讓他實現這個接口。
第二,你還要用類似spring這樣的東西,實現松耦合,利用配置文件修改程序。比如要完成一個登錄功能:
我先寫dao層,其中用到了4個類,
DaoBase.java,用來得到user對象
package com.ssh2demo.dao;
import com.ssh2demo.domain.User;
public abstract class DaoBase {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
IUserDao.java,一個接口,用來封裝登錄的方法
public interface IUserDao {
public void insertUser();
public boolean getUserByName(String name);//如果返回true代表登錄成功
}
IUserDao的實現類UserDaoImp.java
package com.ssh2demo.dao;
import com.ssh2demo.domain.User;
public class UserDaoImp extends DaoBase implements IUserDao{
//..插入一個user
User user = new User();
public void insertUser(){
user.setAge(23);
user.setName("hth");
user.setPassword("123456");
}
public boolean getUserByName(String name){
insertUser();
if(user.getName().equals(name))
return true;
else
return false;
}
}
UserDaoDeco.java這個類繼承了UserDaoImp,用來向spring文件里注入
<bean id="userDaoDeco" class="com.ssh2demo.dao.UserDaoDeco"></bean>
<bean id="userServiceImp" class="com.ssh2demo.service.UserServiceImp">
<property name="userDaoDeco">//此處其實這步的屬性可以直接放接口,注入的類放實現類就 //可以
<ref bean="userDaoDeco"/>
</property>
</bean>
UserDaoDeco.java
package com.ssh2demo.dao;
import com.ssh2demo.dao.UserDaoImp;
public class UserDaoDeco extends UserDaoImp{
}
然后寫service層,service層用了一個工廠類和工廠接口,用來管理service類,這樣寫方便了在action里我只要注入工廠類就可以了,所有的service我都可以通過工廠獲得
<bean id="loginAction" class="com.ssh2demo.struts2.LoginAction" singleton="false">
<property name="service">//此處放一個接口,直接讓action不關心類的具體實現,實現了松耦合
//使程序易于改動,做到了新加而不是修改。
<ref bean="serviceFactory"/>
</property>
</bean>
posted on 2009-04-01 08:16
Werther 閱讀(1773)
評論(0) 編輯 收藏 所屬分類:
10.Java