refactoring笔记——代码重构的方法:Extract Method

本文介绍了一种有效的方法重构技巧,即如何将复杂方法拆分为更小、更易管理的方法。通过实例演示了如何识别不变量与变量,并分别处理,提高代码可读性和维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

适用场合: 当一个类里的方法的语句过长时,就要采取从该方法中,再提取另外一个方法出来;

 

tag: 类 方法 语句过多 提取

 

 提取时要注意的地方:

 

1. 要提取出来的代码,有几个变量, 在这些代码里,哪些变量是没有改变过,哪些变量改变了;

 

解决方法: 没改变的变量,采用传参的方式传到新提取的方法里; 改变的变量,采用返回值的形式返回;


2. 举例:

Class Test

{

 

      public void testA()

    {

            int i;

            String str = "a";

            int Count = 0;

     

           for (i = 0; i < 4; i++)

         {

            switch(i)

            case 0: System.out.print(str); Count = Count + 1; break;

            case 1: System.out.print(str); Count = Count + 2; break;

            case 2: System.out.print(str); Count = Count + 3; break;

            case 3: System.out.print(str); Count = Count + 4; break;

         }

    

      System.our.print(Count);

   }

}

 

 现在要从testA()方法里,把switch这一块提出来,做为一个新方法, switch里,str是没有改变的,而Count是经过改变了的,

具体做法:

 

Class Test

{

       public void testA()

      {

               int i;

               String str = "a";

               int Count = 0;

 

               for (i = 0; i < 4; i++)

              {

                     Count = testA_Extract(int i, String str);

               }

         

           System.our.print(Count);

        }

 

       public int testA_Extract(int i, String str)

       {

                 int Count = 0;

                 switch(i)

                 case 0: System.out.print(str); Count = Count + 1; break;

                 case 1: System.out.print(str); Count = Count + 2; break;

                 case 2: System.out.print(str); Count = Count + 3; break;

                 case 3: System.out.print(str); Count = Count + 4; break;

                 

                return Count;

         }

 }



以下是官方解释:


You have a code fragment that can be grouped together.

Turn the fragment into a method whose name explains the purpose of the method.

	void printOwing() {
		printBanner();

		//print details
		System.out.println ("name:	" + _name);
		System.out.println ("amount	" + getOutstanding());
	}


	void printOwing() {
		printBanner();
		printDetails(getOutstanding());
	}

	void printDetails (double outstanding) {
		System.out.println ("name:	" + _name);
		System.out.println ("amount	" + outstanding);
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值