Back to Posts

设计模式——模版方法个人总结

Posted in DesignPattern

使用场景: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,前一篇

你看那个人好像一条狗啊

Read Next

队列——约瑟夫问题