一、用户组件的功能
使用java8 lambda表达式实现实现世界的一个例子:用户组件。此用户组件有以下几个操作:获取用户列表,获取单个用户,增加用户,删除用户,更新用户。所有的操作都是使用UserRequest对象并返回一个UserResponse对象。
在各个操作中,需要在方法执行前进行请求合法性验证,方法执行后进行特殊的响应处理,检查所有的响应特性
执行日志记录或其他操作。
在原来的处理方式中,需要在每个操作中都把要执行的请求方法包括在至少一个try-catch语句块中。在java8中,可以创建一个的方法统一处理方法执行前后的操作,如源代码中的callComponent方法,使代码更加简单,更少的代码重复。
二、代码样例
1.定义一个用户类User
2.定义用户组件的接口UserComponent,UserRequest,UserResponse
3.使用lambda表达式实现用户组件的接口UserComponentImpl
4.实现Adapter类UserComponentAdapter
5.创建测试类UserComponentTest
public class User {
Integer id;
String name;
Integer age;
User() {
}
User(int id, String name, int age) {
this.id = id;
this.name=name;
this.age = age;
}
public String toString() {
return "" + id + "-" + name + "-" + age;
}
}
public interface UserComponent {
UserResponse fetchAllUsers(UserRequest req);
UserResponse fetchUser(UserRequest req);
UserResponse deleteUser(UserRequest req);
UserResponse updateUser(UserRequest req);
UserResponse insertUser(UserRequest req);
}
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class UserComponentImpl implements UserComponent {
List<User> users = new ArrayList<User>();
public UserResponse fetchAllUsers(UserRequest req) {
return new UserResponse(users);
}
public UserResponse fetchUser(UserRequest req) {
return new UserResponse(users.stream()
.filter(u -> u.id.equals(req.user.id))
.collect(Collectors.toList()));
}
public UserResponse deleteUser(UserRequest req) {
users = users.stream().filter(u -> (!u.id.equals(req.user.id)))
.collect(Collectors.toList());
return new UserResponse(true);
}
public UserResponse updateUser(UserRequest req) {
List<User> list = users.stream().filter(u -> u.id.equals(req.user.id))
.collect(Collectors.toList());
if (list.size() > 0) {
User user = list.get(0);
user.name = req.user.name;
user.age = req.user.age;
return new UserResponse(true);
}
return new UserResponse(false);
}
public UserResponse insertUser(UserRequest req) {
users.add(req.user);
return new UserResponse(true);
}
}
import java.io.IOException;
import java.util.List;
import java.util.function.Function;
public class UserComponentAdapter {
UserComponent uc = new UserComponentImpl();
UserResponse callComponent(UserRequest request,
Function<UserRequest, UserResponse> func) {
try {
// 验证请求的合法性
UserResponse response = func.apply(request);
// 特殊的响应处理,检查所有的响应特性
// 执行日志记录和/或其他操作
return response;
} catch (Exception e) {
e.printStackTrace();
// 进行异常处理
return new UserResponse(true);
}
}
List<User> fetchAllUsers() throws IOException {
return callComponent(new UserRequest(), uc::fetchAllUsers).users;
}
User fetchUser(Integer id) throws IOException {
return callComponent(new UserRequest(new User(id, "", 0)),
uc::fetchUser).users.get(0);
}
boolean deleteUser(Integer id) throws IOException {
return callComponent(new UserRequest(new User(id, "", 0)),
uc::deleteUser).success;
}
boolean updateUser(User user) throws IOException {
return callComponent(new UserRequest(user), uc::updateUser).success;
}
boolean insertUser(User user) throws IOException {
return callComponent(new UserRequest(user), uc::insertUser).success;
}
}
import java.io.IOException;
public class UserComponentTest {
public static void main(String[] args) throws IOException {
UserComponentAdapter uca = new UserComponentAdapter();
uca.insertUser(new User(1, "张三", 12));
uca.insertUser(new User(2, "李四", 21));
uca.insertUser(new User(3, "王五", 32));
uca.insertUser(new User(4, "赵六", 43));
System.out.println(uca.fetchAllUsers());
System.out.println(uca.fetchUser(2));
System.out.println(uca.updateUser(new User(3, "王五五", 55)));
System.out.println(uca.deleteUser(4));
System.out.println(uca.fetchAllUsers());
}
}
public class UserRequest {
User user;
public UserRequest() {
}
public UserRequest(User user) {
this.user = user;
}
}
import java.util.List;
public class UserResponse {
List<User> users;
boolean success = true;
public UserResponse(boolean success) {
this.success=success;
}
public UserResponse(List<User> users) {
this.users = users;
}
}
三、参考资料
http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html.