在面向?qū)ο缶幊陶Z言中一般都會有這樣的概念,比較容易混淆。一般來說如果換種說法的話就比較容易明白。重構(gòu)可以說是覆蓋,用覆蓋一詞來講就比較清楚。在面向?qū)ο蟮囊粋€特性--繼承中就表現(xiàn)出重構(gòu)的意思。
目前創(chuàng)新互聯(lián)建站已為1000多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡空間、網(wǎng)站運營、企業(yè)網(wǎng)站設(shè)計、海興網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
重構(gòu),就是繼承于父類方法的子類將子類的方法重寫,方法名及參數(shù)完全相同,就是有相同的聲明,但是實現(xiàn)不一致或完全不同。這樣如果對面向?qū)ο罄斫獗容^深刻的話,就清楚重構(gòu)正是面向?qū)ο缶幊痰囊淮筇匦浴?/p>
當軟件工程師從事軟件開發(fā)時,在時間比較緊的情況下,通常需要讓軟件最先上線,然后在后期工作中慢慢重新配置和調(diào)整,以替換由于時間不足而留下的漏洞。那么在進行調(diào)整的過程中,有什么需要了解呢?其中最重要的是心態(tài)、技巧和技術(shù)三個方面。在學習電腦培訓的過程中,還需要掌握更多的問題。
一、關(guān)于心態(tài)
在任何項目的實踐中,心態(tài)問題是最重要的,其次就是技術(shù)問題。為什么心態(tài)問題是最重要的呢?因為對于10年以上的舊功能模塊,最復雜的功能模塊實際上是業(yè)務邏輯,而不是技術(shù)實現(xiàn)。因此,對于舊系統(tǒng)的重建,需要整理模塊中大規(guī)模累積的業(yè)務邏輯,這本身就為重構(gòu)提供了無形的壓力。與核心業(yè)務模塊相結(jié)合,較少的業(yè)務邏輯將導致在線收入減少,最終導致程序員的大量時間付出。這一系列背景使得重構(gòu)過程中的心理壓力變得更大。
重構(gòu)項目的最佳方法是仔細澄清所有業(yè)務邏輯,然后使用思維來繪制圖片,這樣您就可以清楚地了解過去所有的業(yè)務邏輯。清晰的業(yè)務邏輯,對于后續(xù)系統(tǒng)重新設(shè)計和編碼有很大的幫助,并且還是角色的決定性部分。
二、關(guān)于技巧
重構(gòu)的經(jīng)驗和技巧遠比技術(shù)實力重要,因為經(jīng)驗可以減少許多不必要的麻煩。在我說出自己的想法之前,我想問一個問題:如果在重構(gòu)的過程中遇到一個問題,進行處理會讓項目更好,但是不解決也沒有太大的影響,你會如何去做呢?在這種情景下,麗江麗江北大青鳥建議,最好是不做,在不影響重構(gòu)的目標的情況下,能不做最好是不做,這并不是懶惰,而是你永遠不知道會有多大的坑在等著你。
三、關(guān)于技術(shù)
技術(shù)是最后一步,但是并不是最重要的一步,至少在我進行重構(gòu)的過程中,由于我的心態(tài)或缺乏技巧,我基本上能夠完成了60%的工作。在我的項目中重構(gòu)的技術(shù)能夠在不到10%的時間內(nèi)完成。重構(gòu)技術(shù)實際上更多地是使用設(shè)計模式以簡潔的代碼呈現(xiàn)復雜的業(yè)務邏輯。簡而言之,它是使用設(shè)計模式來承載復雜的業(yè)務邏輯并使編寫的代碼盡可能簡潔。
在進行重構(gòu)需要更多測試,主要是對業(yè)務的深刻理解和對抽象思維的進一步使用。如果業(yè)務是深入和抽象的,那么可以選擇麗江北大青鳥進行學習設(shè)計模式。如果是相反的話,就沒有辦法做到這一點。
張小喜告別996 實現(xiàn)高效編程 減少開發(fā)壓力 開啟Java高效編程之門(完整版高清視頻)百度網(wǎng)盤 ?
鏈接:
提取碼: aizj 復制這段內(nèi)容后打開百度網(wǎng)盤手機App,操作更方便哦? ?
若資源有問題歡迎追問~ ?
先了解再做項目!
軟件項目重在設(shè)計,如果沒有一個結(jié)構(gòu)化、系統(tǒng)化的設(shè)計就開始項目開發(fā),是不明智的,到最后可能會變成一個龐大、復雜、難于維護的境地,而等項目完成了,在用設(shè)計模式重構(gòu),還會增加軟件測試工作量,對于之前的內(nèi)容都要全部重新測試,浪費資源,得不償失。
對于設(shè)計模式的學習,推薦一本經(jīng)典書籍《軟件秘笈-設(shè)計模式那點事》,相信會對你有幫助的!祝你早日學會設(shè)計模式!
//Platform.java
public class Platform {
/**
* @author lusong
*/
private String brandName;
private String model;
public Platform(String bString,String mString) {
brandName=bString;
model=mString;
}
public String getBrandName() {
return brandName;
}
public String getModel(){
return model;
}
}
//ShiXian.java,其中的getList()方法返回你要求的東東
//不知道合不合你的胃口
import java.util.*;
public class ShiXian {
ArrayListPlatform PlatformList=new ArrayListPlatform();
//用于包含型號的名稱,用于驗證重復,在getLIst方法中使用,因為內(nèi)置類不能訪問方法的局部變量所有在此定義方法中的變量
ListString arrayList=new ArrayListString();
public ShiXian() {
//向該集合中添加成員,型號之間用逗號隔開
PlatformList.add(new Platform("諾基亞","7210,5530,2120"));
PlatformList.add(new Platform("摩托羅拉","V3,L6"));
PlatformList.add(new Platform("諾基亞","N70,N73,N95"));
PlatformList.add(new Platform("摩托羅拉","V4,L7"));
PlatformList.add(new Platform("摩托羅","V4,L7"));
PlatformList.add(new Platform("摩","V4,L7"));
PlatformList.add(new Platform("摩","V4,L7"));
//你可以隨意添加成員,注意型號之間用逗號隔開
}
//你的要求是返回一個包含所有品牌的List,每個List項為一個包含型號的List
public ListArrayListString getList(){
//用于最終返回結(jié)果的List
ListArrayListString list=new ArrayListArrayListString(){
//重寫toString()方法,便于顯示手機名稱
@Override
public String toString() {
int i=0;
// TODO Auto-generated method stub
StringBuilder stringBuilder=new StringBuilder();
for (Iterator iterator = this.iterator(); iterator.hasNext();) {
ArrayListString arrayList1 = (ArrayListString) iterator.next();
stringBuilder.append(arrayList.get(i));
stringBuilder.append("的型號為:");
i=i+1;
stringBuilder.append(arrayList1.toString());
}
return stringBuilder.toString();
}
};
for (Iterator iterator = PlatformList.iterator(); iterator.hasNext();) {
Platform platform=(Platform)iterator.next();
if (arrayList.contains(platform.getBrandName())) {
//該手機已經(jīng)存在,只用添加型號,并且驗證是否重復
String[] strings=platform.getModel().split(",");
ArrayListString arrayList3=list.get(arrayList.indexOf(platform.getBrandName()));
for (int i = 0; i strings.length; i++) {
if (!arrayList3.contains(strings[i])) {
arrayList3.add(strings[i]);
}
}
}
else {
//該手機還不存在,要添加該手機,并添加型號
arrayList.add(platform.getBrandName());
ArrayListString arrayList3=new ArrayListString();
String[] strings=platform.getModel().split(",");
for (int i = 0; i strings.length; i++) {
arrayList3.add(strings[i]);
}
list.add(arrayList3);
}
}
return list;
}
public static void main(String[] args) {
System.out.println(new ShiXian().getList());
}
}