重构-基础3(重构方法之提炼函数)

重构方法

提炼函数

将代码放在独立函数里中,并让函数名解释该函数的用途。
函数的粒度越小,被复用的可能性就越大;并且粒度越小,函数的覆写也会更容易。

版本一:无局部变量

修改前:

    // 做饭
    public void cook(){
        // 买菜
        System.out.println("买菜开始");
        System.out.println("买菜逻辑");
        System.out.println("买菜结束");

        // 洗菜
        System.out.println("洗菜开始");
        System.out.println("洗菜逻辑");
        System.out.println("洗菜结束");

        // 做菜
        System.out.println("做菜开始");
        System.out.println("做菜逻辑");
        System.out.println("做菜结束");
    }

修改后:

  // 做饭
    public void cook(){
        buyVegetables();
        washVegetables();
        doVegetables();
    }
    
    void buyVegetables() {
        // 买菜
        System.out.println("买菜开始");
        System.out.println("买菜逻辑");
        System.out.println("买菜结束");
    }

    void washVegetables() {
        // 洗菜
        System.out.println("洗菜开始");
        System.out.println("洗菜逻辑");
        System.out.println("洗菜结束");
    }

    void doVegetables() {
        // 做菜
        System.out.println("做菜开始");
        System.out.println("做菜逻辑");
        System.out.println("做菜结束");
    }

版本二: 对局部变量做更改

对局部变量做更改,可以直接把局部变量做为参数传入函数(基础类型不OK的哦,例如String、Integer)
修改前:

   public static void main(String[] args){
        Vegetables vegetables = new Vegetables();
        System.out.println("洗菜开始");
        System.out.println("洗菜逻辑");
        System.out.println("洗菜结束");
        vegetables.setVegetablesState("菜已清洗结束");
        System.out.println("菜的状态:" + vegetables.getVegetablesState());
    }

修改后:

 public static void main(String[] args){
        Vegetables vegetables = new Vegetables();
        washVegetables(vegetables);
        System.out.println("菜的状态:" + vegetables.getVegetablesState());
    }

    public static void washVegetables(Vegetables vegetables) {
        // 洗菜
        System.out.println("洗菜开始");
        System.out.println("洗菜逻辑");
        System.out.println("洗菜结束");
        vegetables.setVegetablesState("菜已清洗结束");
    }

版本二: 分解函数内创建局部变量

如果局部变量在分解函数内创建或者在分解函数内被重新赋值,后面还要继续使用,则需要做为返回值传递出来。
修改前:

public static void main(String[] args) {
        System.out.println("买菜开始");
        List<Vegetables> vegetables = new ArrayList<Vegetables>();
        Vegetables tomatoes = new Vegetables();
        tomatoes.setVegetablesName("tomato");
        tomatoes.setVegetablesPrice(2.00);
        vegetables.add(tomatoes);
        Vegetables eggs = new Vegetables();
        eggs.setVegetablesName("egg");
        eggs.setVegetablesPrice(5.00);
        vegetables.add(eggs);
        System.out.println("买菜结束");
        for (Vegetables tmp : vegetables) {
            System.out.println("买到的菜都有:" + tmp.toString());
        }
        washVegetables(vegetables);
    }
    
    public static void washVegetables(List<Vegetables> vegetables) {
        // 洗菜
        System.out.println("洗菜开始");
        System.out.println("洗菜逻辑");
        System.out.println("洗菜结束");
        for (Vegetables tmp : vegetables) {
            tmp.setVegetablesState("菜已清洗结束");
        }
    }

修改后:

public static void main(String[] args) {
        List<Vegetables> vegetables = buyVegetables();
        for (Vegetables tmp : vegetables) {
            System.out.println("买到的菜都有:" + tmp.toString());
        }
        washVegetables(vegetables);
    }

    public static List<Vegetables> buyVegetables() {
        // 买菜
        System.out.println("买菜开始");
        List<Vegetables> vegetables = new ArrayList<Vegetables>();
        Vegetables tomatoes = new Vegetables();
        tomatoes.setVegetablesName("tomato");
        tomatoes.setVegetablesPrice(2.00);
        vegetables.add(tomatoes);
        Vegetables eggs = new Vegetables();
        eggs.setVegetablesName("egg");
        eggs.setVegetablesPrice(5.00);
        vegetables.add(eggs);
        System.out.println("买菜结束");
        return vegetables;
    }

    public static void washVegetables(List<Vegetables> vegetables) {
        // 洗菜
        System.out.println("洗菜开始");
        System.out.println("洗菜逻辑");
        System.out.println("洗菜结束");
        for (Vegetables tmp : vegetables) {
            tmp.setVegetablesState("菜已清洗结束");
        }
    }
原创文章 88 获赞 21 访问量 3万+

猜你喜欢

转载自blog.csdn.net/cfy1024/article/details/88891378
今日推荐