我有这些课程:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String name;
private int age;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Admin {
private String name;
private int age;
}
而且我有一些模板方法模式实现的操作。带算法的基类:
public abstract class Operation<T> {
public void process(T t) {
System.out.println(t);
updateName(t);
System.out.println(t);
}
protected abstract void updateName(T t);
}
实现模板方法的两个孩子:
@Component
public class UserOperation extends Operation<User> {
@Override
protected void updateName(User user) {
String newName = user.getName().toUpperCase();
user.setName(newName);
}
}
@Component
public class AdminOperation extends Operation<Admin> {
@Override
protected void updateName(Admin admin) {
String name = admin.getName();
StringBuilder builder = new StringBuilder();
builder.append(name);
StringBuilder reverse = builder.reverse();
admin.setName(reverse.toString());
}
}
我的问题:
如何重写此代码以使用组合?
我是否正确理解使用模板方法时,我附加到继承?
模板方法是避免重复的好方法。但是如果它将我绑定到继承,还有什么其他方法可以避免代码重复?在我的示例中,如何使用组合?(用其他东西替换模板方法?)