第一章 設(shè)計模式概述
設(shè)計模式能夠使解決方案既優(yōu)雅簡單,又可復(fù)用。設(shè)計模式僅僅是一些項目之間和程序員之間面向?qū)ο蟠a的簡便方法,設(shè)計模式背后的思想很簡單:對通用的對象間的相互作用方式進行記錄和編目(程序員經(jīng)常發(fā)現(xiàn)這些對象見的相互終于哦用方式很有用)。換言之,設(shè)計模式描述了對象如何進行通信才能不牽扯相互的數(shù)據(jù)模式和方法,保持這種獨立性一直是一個好的面向?qū)ο蟪绦蛟O(shè)計的目標(biāo)。從而可以實現(xiàn)代碼的可復(fù)用性。
1. 設(shè)計模式
設(shè)計模式是對讀者經(jīng)常遇到的設(shè)計問題的可再現(xiàn)的解決方案。
設(shè)計模式建立了一系列描述如何完成軟件開發(fā)領(lǐng)域中特定任務(wù)的規(guī)則。
設(shè)計模式更關(guān)注于復(fù)用和重復(fù)出現(xiàn)的結(jié)構(gòu)設(shè)計方案,而框架注重于具體的設(shè)計和實現(xiàn)。
模式提出了一個發(fā)生在特定設(shè)計環(huán)境中的可重復(fù)出現(xiàn)的設(shè)計問題,并提供了解決方案
模式識別并確定類和實例層次上或組件層次上的抽象關(guān)系
設(shè)計模式有三種類型
創(chuàng)建型模式是創(chuàng)建對象而不是直接實例化對象,這會使程序在判斷給定情況下創(chuàng)建那一個對象時更靈活。
結(jié)構(gòu)型模式可以將一組對象組合成更大的結(jié)構(gòu),例如復(fù)雜的用戶界面和報表數(shù)據(jù)
行為型模式定義系統(tǒng)內(nèi)對象間的通信,以及復(fù)雜程序中的流程控制
2. 關(guān)于面向?qū)ο蠓椒?/span>
封裝和繼承能讓程序員達到分離類的目的,一個繼承父類的類能訪問父類所有方法和所有非私有變量,但是如果一個功能完整的類開始繼承層次結(jié)構(gòu),可能過多的限制住了自己,也會給特定的實現(xiàn)帶去累贅,設(shè)計模式建議遵循下列原則:針對接口編程,而不是針對實現(xiàn)編程。即在任何類層次結(jié)構(gòu)的頂端,定義的是一個抽象類或一個接口,他沒有實現(xiàn)方法,但是定義了該類需要支持的方法,這樣在所有的派生類中,就會有更大的自由度去實現(xiàn)這些方法,能最大限度地滿足你的要求。
對象組合,這是一種可以包含其他對象的對象結(jié)構(gòu),即把幾個對象封裝在另一個對象中,當(dāng)編寫比較復(fù)雜的程序,對象組合具有一些優(yōu)勢,新的對象擁有一個最適合于要完成的目標(biāo)的接口,而不是擁有父類中的所有方法,說明了編程的第二個原則:優(yōu)先使用對象組合,而不是繼承。
C#基礎(chǔ)知識
C#、java和vb的區(qū)別
C#和Java都是區(qū)別大小寫的;C#中的每一條語句都已分號結(jié)束;而vb是不區(qū)分大小寫的,
C#中的修飾符const的含義是:被命名的值是一個常數(shù),不能更改。
數(shù)據(jù)類型
基本數(shù)據(jù)類型的長度與計算機或操作系統(tǒng)的類型無關(guān)。
寬度窄的數(shù)據(jù)類型可以直接賦給較寬的數(shù)據(jù)類型,并能自動轉(zhuǎn)化為新類型。
可以通過強制轉(zhuǎn)化把較寬的類型縮減成較窄的類型,這種轉(zhuǎn)化需要把數(shù)據(jù)類型的名稱放在圓括號內(nèi)。
Java和c#的布爾變量只能接受保留字true和false所表示的值,與c和c++不同,不能將數(shù)值型數(shù)據(jù)賦給布爾型變量,也不能在布爾類型和其他數(shù)據(jù)類型之間轉(zhuǎn)化。
數(shù)值與字符串間的轉(zhuǎn)化,可以使用Convert類的方法實現(xiàn)數(shù)值轉(zhuǎn)化成字符串或?qū)⒆址D(zhuǎn)化成數(shù)值。例如:
String s=Convert.ToString(x);
Float y=Convert.ToSingle(s); //single代表一個單精度浮點數(shù)
數(shù)值型對象也提供了各種格式話方法類指定小數(shù)位數(shù);
Float x=12.3453234f;
String s=x.ToString(“###.###”); //gives 12.345
注意最后一位進行四舍五入
C#和java允許在一條語句里聲明同一類型的多個變量
數(shù)值型常量,任何數(shù)如果沒有小數(shù)部分的話,就自動為整數(shù)類型,如果有小數(shù)部分 ,就自動為double類型,如果想指定成不同的類型,可以使用各種前綴和后綴字符。
C#中有三個保留字常量,true、false和null,null表示一個對象變量還沒有 指定任何對象。
字符常量
用但引號把字符括起來表示字符常量,轉(zhuǎn)意字符和c、java中約定的一樣。
C#和java的區(qū)別
1. 許多系統(tǒng)對象方法都有相同的方法名,只是在大小寫形式上有區(qū)別
2. C#不提供throws關(guān)鍵字,該關(guān)鍵字使編譯器檢查你是否鋪貨了一個方法拋出的異常。
3. C#對于布局管理器有更多的限制,因為他是以windows系統(tǒng)為中心的,大多數(shù)時候采用的圖形元素的絕對位置。
4. C#允許運算符重載
5. C#引進了代理和索引器
6. C#有枚舉類型
7. C#有不安全模式,在這種模式下可以使用指針
8. 必須專門聲明一個方法能被覆蓋及一個方法能覆蓋另一個方法
9. 不能通過聲明來區(qū)別繼承和接口實現(xiàn),他們的聲明方式是一樣的
10. Switch語句允許使用字符串變量,如果變量沒有被匹配,必須有一個默認(rèn)情況,否則會出現(xiàn)錯誤,break語句是必須的。
11. 布爾值變量類型在C#中拼為“bool”,而java中拼為“boolean”
C#和C的區(qū)別
1. C#通常不能使用指針
2. 可以在一個方法里的任何位置聲明變量,不必把聲明語句放在方法的頂端
3. 使用一個對象前,不一定要聲明它,可以在用到的時候在定義
4. C#對結(jié)構(gòu)體類型偶那個的定義有些不同,他根本不支持聯(lián)合類型
5. C#有枚舉類型,允許一系列被命名的量(如顏色或一周里的每一天)賦值為連續(xù)的數(shù)值,但是語法有些不同。
6. C#沒有位域,也就是說,變量至少要占用一個字節(jié)的存儲空間
7. C#不支持變長參數(shù)列表,必須針對參數(shù)值和類型定義一個方法,然而C#語句允許函數(shù)的最后一個參數(shù)為可變參數(shù)數(shù)組
8. C#引入了代理和索引器的思想,這些在其他流行的語言中是沒有的。
用C#編寫windows程序
1. C#中的對象
C#中的任何食物都被看做是對象,對象包含數(shù)據(jù)并具有操作數(shù)據(jù)的方法,
整型變量、浮點型變量和雙精度型變量也是對象,他們也具有方法
注意:
數(shù)值類型的轉(zhuǎn)化是用方法而不是外部函數(shù)完成的。在把一個數(shù)值格式化成一個特定的字符串時,每種數(shù)值類型都提供了一個格式化方法。
2. 受管語言和垃圾自動收集
C#和VB.NET都是受管語言,有兩個含義:一個是兩者被編譯成中間的底層語言,都使用通用語言運行時(Common Language Runtime,CLR)執(zhí)行編譯后的代碼,或者進一步編譯這些代碼。另一方面,受管語言都是垃圾自動收集的,垃圾自動收集語言負(fù)責(zé)師傅拿個不用的內(nèi)存,垃圾收集系統(tǒng)一旦檢測到變量、數(shù)組或?qū)ο蟛辉诒灰茫桶严鄳?yīng)的內(nèi)存空間釋放回系統(tǒng),在大多數(shù)情況下,根本不用考慮內(nèi)存的分配與釋放問題。