蘇州建站模板展示360投放廣告怎么收費(fèi)
《大話設(shè)計(jì)模式》
- 序 為什么要學(xué)設(shè)計(jì)模式
- 第0章 面向?qū)ο蠡A(chǔ)
- 什么是對象?
- 什么是類?
- 什么是構(gòu)造方法?
- 什么是重載?
- 屬性與字段有什么區(qū)別?
- 什么是封裝?
- 什么是繼承?
- 什么是多態(tài)?
- 抽象類的目的和特點(diǎn)是什么?
- 什么是接口?
- 抽象類與接口的區(qū)別?
- 什么是 ArrayList,它的優(yōu)缺點(diǎn)是什么?
- 什么是泛型?
- 第1章 簡單工廠模式
- 封裝思想的實(shí)現(xiàn)?
- 繼承思想的實(shí)現(xiàn)?
- 簡單工廠模式(多態(tài)思想)的實(shí)現(xiàn)?
- UML類圖的六種箭頭?
- 第2章 策略模式
- 持續(xù)更新中...
序 為什么要學(xué)設(shè)計(jì)模式
重要的不是你將來會不會用到這些模式,而是通過這些模式讓你找到“封裝變化”、“對象間松散耦合”、“針對接口編程的感覺”,從而設(shè)計(jì)出易維護(hù)、易拓展、易復(fù)用、靈活性好的程序。
第0章 面向?qū)ο蠡A(chǔ)
什么是對象?
一切事物皆為對象。對象就是可以看到、感覺到、聽到、觸摸到、嘗到或聞到的東西。準(zhǔn)確地說,對象是一個(gè)自包含的實(shí)體,用一組可識別的特性和行為來標(biāo)識。
什么是類?
類就是具有相同的屬性和功能的對象的抽象的集合。
什么是構(gòu)造方法?
又叫構(gòu)造函數(shù),其實(shí)就是對類進(jìn)行初始化。構(gòu)造方法與類同名,無返回值,不需要 void,在 new 的時(shí)候被調(diào)用。
什么是重載?
重載可在不改變原方法的基礎(chǔ)上,新增功能。要求方法名相同,參數(shù)類型或個(gè)數(shù)不同。
屬性與字段有什么區(qū)別?
屬性是一個(gè)或一對方法,即屬性適合于以字段的方式使用方法調(diào)用的場合;
字段是存儲類要滿足其設(shè)計(jì)所需要的數(shù)據(jù),字段是與類相關(guān)的變量;
如:shoutNum 是私有的字段,對應(yīng)地,ShoutNum 是共有的對外屬性。
什么是封裝?
假設(shè)我們的房子是一個(gè)類的實(shí)例,室內(nèi)的裝飾只能供住戶看到,外人無法透過墻看到內(nèi)部的細(xì)節(jié);但與此同時(shí),房子會安置門窗,相當(dāng)于對外提供接口,可以訪問內(nèi)部的數(shù)據(jù)。
每個(gè)對象都包含它能進(jìn)行操作所需要的所有信息,這個(gè)特性稱為封裝。它的好處有:
- 解耦
把屬于一個(gè)類的信息提取出來。就好比居委會的公共電視放在你家,別人家都沒有,鄰居都來你家看電視。你肯定不想這樣,我們就應(yīng)該把公共電視放在居委會。
-
類的內(nèi)部實(shí)現(xiàn)可以自由修改
-
類具有清晰的對外接口
什么是繼承?
繼承定義了類如何相互關(guān)聯(lián),共享特性。“is a” 的關(guān)系,繼承的特點(diǎn):
- 子類擁有父類非 private 的屬性和功能;
- 子類擁有自己的屬性和功能,即可以拓展;
- 子類可以以自己的方法實(shí)現(xiàn)父類的功能(方法重寫)
什么是多態(tài)?
多態(tài)表示不同的對象可以執(zhí)行相同的動作,但通過自己的實(shí)現(xiàn)代碼來執(zhí)行。特點(diǎn):
-
子類以父類的身份出現(xiàn);
Animal cat = new Cat();
-
子類在工作時(shí)以自己的方式實(shí)現(xiàn);
-
子類以父類的身份出現(xiàn)時(shí),子類特有的屬性和方法不能使用。
(還是沒悟)
抽象類的目的和特點(diǎn)是什么?
抽象類應(yīng)該擁有盡可能多的共同代碼,擁有盡可能少的數(shù)據(jù)。
- 抽象類不能被實(shí)例化
- 抽象方法是必須被子類重寫的方法
- 如果類中包含抽象方法,那么類就必須定義為抽象類
什么是接口?
接口是把隱式公共方法和屬性組合起來,以封裝特定功能的一個(gè)集合。
- 不能實(shí)例化
- 沒有構(gòu)造方法
- 沒有字段
- 沒有修飾符
- 不能聲明為虛擬或靜態(tài)
抽象類與接口的區(qū)別?
- 抽象類是對類(整體)的抽象,接口是對行為(局部)的抽象
- 抽象類是自底向上抽象出來的,接口是自頂向下設(shè)計(jì)出來的
什么是 ArrayList,它的優(yōu)缺點(diǎn)是什么?
ArrayList 是包 java.util.ArrayList 下的一部分,使用大小可按需動態(tài)增加的數(shù)組實(shí)現(xiàn) Collection 接口。
優(yōu)點(diǎn):
- 大小按需動態(tài)增加,初始為 0
- 隨意添加或移除某一范圍元素
缺點(diǎn):
- ArrayList 類型不安全,在它眼中所有元素都是 Object,對于不同類型的元素,編譯時(shí)沒問題,運(yùn)行時(shí)報(bào)錯(cuò)
- 對于任意類型,都需要裝箱拆箱,造成性能損耗
裝箱
int i = 123;
Object o = (Object)i;
拆箱
o = 123;
int i = (int)o;
什么是泛型?
泛型是具有占位符(類型參數(shù))的類、結(jié)構(gòu)、接口和方法。用法是在 ArrayList 后面加上"",二者在功能上是一樣的,不同點(diǎn)在于泛型在聲明和實(shí)例化時(shí)都需要指定其內(nèi)部項(xiàng)的數(shù)據(jù)或?qū)ο箢愋?。這就避免了上面提到的安全問題和性能損耗。
第1章 簡單工廠模式
這是一個(gè)逐步優(yōu)化的過程
封裝思想的實(shí)現(xiàn)?
業(yè)務(wù)邏輯與界面邏輯分開,降低耦合
繼承思想的實(shí)現(xiàn)?
修改任一算法,不需要提供其他算法的代碼
簡單工廠模式(多態(tài)思想)的實(shí)現(xiàn)?
明確工廠要實(shí)例化的對象
UML類圖的六種箭頭?
依賴:動物 依賴 氧氣
abstract class Animal {public metabolism(Oxygen oxygen) { // 新陳代謝}
}
關(guān)聯(lián):企鵝 關(guān)聯(lián) 氣候
含義:“了解”,企鵝了解氣候
class Penguin {private Climate climate;
}
泛化:鳥 泛化 動物
class Brid extends Animal {}
實(shí)現(xiàn):大雁 實(shí)現(xiàn) 飛翔
class WideGoose implements IFly {}
聚合:雁群 聚合 大雁
含義:弱的“has a”,雁群包含大雁,但大雁不是雁群的一部分(理解不了?看下面的組合就明白了!)
與圖中箭頭方向相反,即空心菱形在雁群一側(cè)
class WideGooseAggregate {private WideGoose[] arrayWideGoose;
}
組合:鳥 組合 翅膀
含義:強(qiáng)的“has a”
class Bird {private Wing wing;public Bird() {// Bird初始化時(shí),Wing同時(shí)生成wing = new Wing();}
}