在學習軟體構造這門課時,我們接觸到了設計模式這個概念,在最開始的學習過程中,由於沒有用到過這些模式,所以並不能接受這些模式中的各種關係和其本身的意義,但是,在經過了學習與實踐之後,我就能夠淺略地了解這些模式的內容了。
這是最先講的模式,可以採用乙個模擬的思想去理解這個模式的含義:在生活中不同國家的用電器的工作電壓是不同的,好比日本和中國的就不一樣,所以,如果想在中國使用日本的電器,那麼一定要把這個電器先連在乙個變壓器上,再用變壓器插在插座上,這樣才能使得日本的電器在中國使用。
而介面卡模式也是這個含義,他將乙個類的介面轉換成使用者希望的另外乙個介面,使得原本由於介面不相容而不能一起工作的那些類能一起工作。這就充當了「變壓器」的角色。
**如下:
inte***ce
target
class
adapter
}class
classadapter
extends
adapter
implements
target
}public
class
adaptertest
}
裝飾器模式:顧名思義,裝飾嗎,就像包裝紙一樣,如果乙個物品,它被層層包裝紙包裝上,那麼它不就具有了這些包裝紙帶來的色彩了嗎?所以,當需要某些功能的組合的時候,我們也可以像加包裝紙那樣將各種功能進行組合。
如圖:
首先要有乙個具體物件來實現共性的功能,之後由乙個抽象類來實現包裝紙的疊加。
例項:
public
class
decoratortest
}inte***ce
component
class
component1
implements
component
public
void
operation()
}class
decorator
implements
component
public
void
operation()
}class
decorator1
extends
decorator
public
void
operation()
public
void
addedfunction()
}
當我們為了達到某乙個目標需要完成一系列的事情的時候,我們就像需要在不同的部門之間來回跑,所以,這個時候我們可以設想一下,如果有乙個部門,它可以在本部門內完成這個目標,這是不是就能大大減小我們的花費?
外觀模式的含義大致就是這個意思,它是一種通過為多個複雜的子模組提供乙個一致的介面,而使這些子模組更加容易被訪問的模式。
策略模式的內容也很好理解,就是:為了完成乙個目標,我們擁有不止一種方法去實現,那麼,我麼就得在其中挑選出一種最適合我們現狀的方法。那麼,怎麼選擇方法呢?這就不能硬選,不能再開發的時候寫進去,為了更能適應現實,我們應該讓系統在執行的時候自己進行挑選,所以,這就需要用到delegation。
例項:
inte***ce
strategy
class
strategya
implements
strategy
}class
strategyb
implements
strategy
}class
context
public
void
setstrategy
(strategy strategy)
public
void
strategymethod()
}public
class
strategyce
}
在生活中,我們遇到過乙個腦筋急轉彎:把大象放冰箱需要幾步?答:三步:把冰箱門開啟;把大象放進去;把冰箱門關上。這個腦筋急轉彎充分體現了這個模式的思想,也許每個人的方法具體的實現方式都不一樣,但是,他們的方法肯定可以這麼分。所以,針對於完成乙個目標,有著固定的方法順序,但是實現方法的方式或細節可能不同,所以這個時候就需要用到這個模式了。
它定義乙個操作中的演算法骨架,而將演算法的一些步驟放到到子類中,使得子類可以不改變該演算法結構的情況下重定義該演算法的某些特定步驟。這樣就可以滿足方法步驟大致相同卻實現方式不同的需求。
例子:
public
class
template
}abstract class
abstracttemplate
public abstract void
abstractmethod1()
;public abstract void
abstractmethod2()
;}class
modextends
abstracttemplate
public
void
abstractmethod2()
}
這應該是最先接觸到的模式,以至於在接觸到的時候都沒有注意。老師在一次實驗課介紹的時候說了iterator的用法,但是後來,我們才知道,這也是一種設計模式。
迭代器模式:它在客戶訪問類與聚合類之間插入乙個迭代器,這分離了聚合物件與其遍歷行為,對客戶端也隱藏了其內部細節,這也滿足「單一職責原則」和「開閉原則」,防止資訊洩露。
實現方式就是:讓自己的集合類實現iterable介面,並實現自己的獨特iterator類完成迭代器(三種方法:hasnext, next, remove)的設計,允許客戶端利用這個迭代器進行顯式或隱式的迭代遍歷:
軟體構造 實驗回顧 Lab2
第二部分 re implement the social network in lab1 第三部分 playing chess 本次實驗訓練抽象資料型別 adt 的設計 規約測試,並使用物件導向 程式設計 oop 技術實現 adt。具體來說 針對給定的 應用問題,從描述中識別所需adt 設計 adt...
二)軟體構造的質量目標
軟體構造的五個主要目標 軟體的質量因素分為外部質量因素和內部質量因素 軟體的內部質量因素 robustness 1.保證出現abnormal時程式不會崩潰,而是優雅的提示資訊 2.normal or abnormal取決於specification的範疇 extendibility 保證措施 1.d...
軟體構造 實驗二新知識(二)
在完成實驗的過程中,見到了從未見過的異常 nosuchelementexception。使用情況是方法a呼叫方法b,也呼叫方法c,在b和c中都使用了scanner,並且都進行了關閉。情況和下面的情況大致相同。public class testscanner public void method1 p...