日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

必会重构技巧(三):提取接口

發布時間:2025/4/5 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 必会重构技巧(三):提取接口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

提取接口:當有多余一個類使用另外一個類中的方法時,可以考慮引入接口,解除這種依賴。 舉例理解:比如說類A中有個方法為Call(Type T),類B和類C中都有方法都要調用Call這個方法,那么我們推薦引入一個接口,這樣傳參時可以直接new一個接口,可以解除調用方法和實現方法之間的耦合關系。面向接口編程也算是OO中比較重要的吧。 項目實例:一般而言在設計的時候,對于比較可能擴展的部分都會用接口或者是抽象方法來處理,對于接口,個人并不是很喜歡,因為接口寫好了要修改就很困難,只能再加新的接口,這對設計的要求很高,抽象方法相對好用點。下面的代碼擴展于原文的Demo Code,希望可以講得稍微詳細點。

  提取接口:當有多余一個類使用另外一個類中的方法時,可以考慮引入接口,解除這種依賴。

  舉例理解:比如說類A中有個方法為Call(Type T),類B和類C中都有方法都要調用Call這個方法,那么我們推薦引入一個接口,這樣傳參時可以直接new一個接口,可以解除調用方法和實現方法之間的耦合關系。面向接口編程也算是OO中比較重要的吧。

  項目實例:一般而言在設計的時候,對于比較可能擴展的部分都會用接口或者是抽象方法來處理,對于接口,個人并不是很喜歡,因為接口寫好了要修改就很困難,只能再加新的接口,這對設計的要求很高,抽象方法相對好用點。下面的代碼擴展于原文的Demo Code,希望可以講得稍微詳細點。

  先來看看原始的未經過重構的代碼:

?

實現類 public class ClassRegistration
{
public void CreateAdmin()
{
// create registration code
}
public void CreateUser()
{
// create registration code
}

public decimal Total { get; private set; }
}
public class RegistrationProcessor
{
public decimal ProcessRegistrationAdmin(ClassRegistration registration)
{
registration.CreateAdmin();
return registration.Total;
}
public decimal ProcessRegistrationUser(ClassRegistration registration)
{
registration.CreateUser();
return registration.Total;
}
}

?

?

?

調用方法 protected void CreateAdmin_Click(object sender, EventArgs e)
{
RegistrationProcessor registrationProcessor
= new RegistrationProcessor();
registrationProcessor.ProcessRegistrationAdmin(
new ClassRegistration());
}

protected void CreateUser_Click(object sender, EventArgs e)
{
RegistrationProcessor registrationProcessor
= new RegistrationProcessor();
registrationProcessor.ProcessRegistrationUser(
new ClassRegistration());
}

?

上面的偽代碼實現了創建Admin和User的主要類和主要實現方法及調用事件,這樣的代碼看似沒問題,其實是非常不方便擴展的。請大家想想,如果我現在要添加一個創建Viewer用戶的事件,需要改幾個方法?我整理如下: (1)在類ClassRegistration中增加一個CreateViewer()的方法; (2)在類RegistrationProcessor中增加一個處理注冊Viewer用戶的方法ProcessRegistrationViewer(); (3)在CreateViewer的Button事件中添加代碼; 如上,改的地方實在太多了,這里對于創建用戶的這個方法完全可以抽象出來,把它作為一個接口方法處理,重構后的代碼如下: 重構后的實現類 public interface IClassRegistration
{
void Create();
decimal Total { get; }
}
public class ClassRegistrationAdmin : IClassRegistration
{
public void Create()
{
// create registration code
}
public decimal Total { get; private set; }
}
public class ClassRegistrationUser : IClassRegistration
{
public void Create()
{
// create registration code
}
public decimal Total { get; private set; }
}
public class RegistrationProcessor
{
public decimal ProcessRegistration(IClassRegistration registration)
{
registration.Create();
return registration.Total;
}
}

?

重構后的調用方法 protected void Create_Click(object sender, EventArgs e)
{
var btn
= sender as Button;
if (btn != null)
{
RegistrationProcessor registrationProcessor
= new RegistrationProcessor();
IClassRegistration registration;
switch (btn.CommandArgument)
{
case "CreateAdmin":
registration
= new ClassRegistrationAdmin();
registrationProcessor.ProcessRegistration(registration);
break;
case "CreateUser":
registration
= new ClassRegistrationUser();
registrationProcessor.ProcessRegistration(registration);
break;
}
}
}

?

如上,提取接口后,對于新類型用戶的創建就方便多了,新建一個基于接口的創建新用戶的類,然后在Button的事件中加個分支就好了。并且我們只需要實現接口中的方法Create()就OK了。 面向接口編程,能大大提高程序的可擴展性可維護性,對于程序的模塊化很有幫助,非常適合用于多模塊,多團隊合作的項目。

轉載于:https://www.cnblogs.com/flashbar/archive/2010/07/12/1775834.html

總結

以上是生活随笔為你收集整理的必会重构技巧(三):提取接口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。