前言: java 合理的使用接口和抽象类可以大大减少冗余代码的使用,例如可以将常见的增删改查的操作,抽象成一个基类,通过通配类的方式实现对数据的增删改查,通过创建一个抽象类让其他的类继承抽象类得到里面通配的方法
通配类方法简单实例:
创建一个基类,里面包含一些基础的方法:
package test.java.base;
import java.util.List;
/**
* @author 作者:jcl
* @createDate 创建时间:2019年3月25日 上午9:51:18
*/
public class CurdService<T> {
public T get(T t) {
return t;
}
public void add(T t) {
}
public void update(T t) {
}
}
再创建一个具体的实现service,继承这个基类
package test.java.base;
import java.util.ArrayList;
import java.util.List;
import test.java.model.User;
/**
* @author 作者:jcl
* @createDate 创建时间:2019年3月25日 上午9:55:42
*/
public class UserService extends CurdService<User>{
public List<User> getList() {
// TODO Auto-generated method stub
List<User> list = new ArrayList<User>();
User user = new User();
user.setAddress("shanghai");
user.setAddress("12");
user.setUsername("test");
user.setPassword("123");
list.add(user);
return list;
}
}
测试通配效果:
package test.java;
import java.util.List;
import test.java.base.UserService;
import test.java.model.User;
/**
* @author 作者:jcl
* @createDate 创建时间:2019年3月25日 上午9:55:09
*/
public class BaseTest {
public static void main(String[] args) {
UserService service = new UserService();
User user = new User();
user.setAddress("shanghai");
user.setAddress("12");
user.setUsername("test");
user.setPassword("123");
User userRes = service.get(user);
System.out.println(userRes.toString());
}
}
这样基类中的方法就可以被其他的service实现复用从而大大简化代码
通配类方法升级实现增删改查:
dao基类:
package test.java.base;
import java.util.List;
/**
* @author 作者:jcl
* @createDate 创建时间:2019年3月25日 上午10:10:56
*/
public interface CurdDao<T> {
public T get(String t);
public int update(T t);
public int add(T t);
public int delete(T t);
public List<T> getList();
}
dao层:
package test.java.base;
import test.java.model.User;
/**
* @author 作者:jcl
* @createDate 创建时间:2019年3月25日 上午10:15:09
*/
public interface UserDao extends CurdDao<User>{
// 这里面写除了增删改查之外的方法
public User getChange();
}
service基类:
package test.java.base;
import java.util.List;
/**
* @author 作者:jcl
* @createDate 创建时间:2019年3月25日 上午9:51:18
*/
public class CurdService<T extends CurdDao<T1>,T1> {
T dao;
/*
* T1 为实体
*
*
* **/
public T1 get(String id) {
T1 t = dao.get(id);
return t;
}
public void add(T1 t) {
dao.add(t);
}
public void update(T1 t) {
dao.update(t);
}
}
service层实现:
package test.java.base;
import java.util.ArrayList;
import java.util.List;
import test.java.model.User;
/**
* @author 作者:jcl
* @createDate 创建时间:2019年3月25日 上午9:55:42
*/
public class UserService extends CurdService<UserDao,User>{
public List<User> getList() {
// TODO Auto-generated method stub
List<User> list = new ArrayList<User>();
User user = new User();
user.setAddress("shanghai");
user.setAddress("12");
user.setUsername("test");
user.setPassword("123");
list.add(user);
dao.add(user); // 实现service基类中的方法
dao.getChange(); // 自定义方法
/**
* 这样就可以在每个业务实现的dao,service层实现service,dao的基类
* 避免了写每层业务的增删改查,实现了代码的简化
* */
return list;
}
}