使用场景:IDEA中提示这一段代码重复出现了很多次,而这些代码中间有少部分的代码是与各自业务有关,这部分与业务有关的代码夹杂在一堆重复代码中;例如:
模版方法
public class A{
public void aMethod(){
// dosomething 1
// todo:A类业务的代码
// dosomething 2
}
}
public class B{
public void bMethod(){
// dosomething 1
// todo:B类业务的代码
// dosomething 2
}
}
上述的代码中,在AB两个类中各自有自己的aMethod和bMethod方法,在两个方法中出现了重复代码:dosomething1、2,而各自逻辑穿插在了其中
Java8以前的做法:
将dosomething1、2提取到抽象基类中,提供一个公用方法完成dosomething1、2,并提供抽象方法,在公用方法中间调用抽象方法; 而AB只要继承基类并实现抽象方法即可
public abstract class Base{
public void method(){
// dosomething1
dose();
// dosomething2
}
public abstract void dose();
}
public class A extends Base{
public void dose(){
// todo:A业务
}
}
public class B extends Base{
public void dose(){
// todo:B业务
}
}
Java8 lambda实现:
public class Base{
public static void dose(java.util.function.Consumer consumer){
// dosomething1
consumer.accept();
// dosomething2
}
}
public class A{
public void method(){
//Base.dose(()->dosomething);
}
}
public class B{
public void method(){
//Base.dose(()->dosomething);
}
}
java8用闭包可以实现模版方法的功能(Base中的dose的入参类型需要具体业务调整),在AB类中只要调用Base类的静态方法dose并传入lambda的实现即可,关于Java8的lambda,前一篇