JavaOO設計模式概要(試用markdown)

2021-07-24 22:48:08 字數 4526 閱讀 1618

物件導向的分析與設計。

軟體工程學:是指導計算機軟體開發和維護的一門工程學科。採用工程化的方法開發維護。

方法 :完成軟體開發各項任務的技術方法(物件導向方法)

工具 : ea(為運用方法提供的自動或者半自動的軟體工程支撐環境)

過程 : 基於原型的增量迭代軟體開發過程(一系列任務的框架)

(尋找商機,投標等等)

專案:有明確的需求的提出方

產品:沒有明確的需求提出方,根據市場需求,自己提需求,自己設計

技術可行性、資金可行性、人員可行性、…………

主要成果:可行性分析報告

確定待開發的系統是」做什麼」

確定軟體系統的功能需求和非功能需求。

主要成果:軟體需求規格說明書(software requirements specification,即srs)

主要成果:概要設計說明(分幾層),詳細設計說明(介面,bean的提取)、資料庫 ,設計說明書。

主要成果:通過單元測試的源**

通過各種測試方法和工具,使bug降到最低

主要成果:軟體測試報告

主要任務:通過各種必要的維護活動使系統持久的滿足使用者的需要。

維護活動4類:

1.改正性維護

2.適應性維護

3.完善性維護

4.預防性維護。

主要成果:軟體問題報告,軟體變動記錄,軟體維護記錄。

瀑布模型、噴泉模型、

———————————設計語言:uml—統一建模語言(圖形化語言)

用在設計階段,從各個角度來對專案進行描述。是被ibm統一了的

(流程圖也包括在內,時序圖,泳道圖,類圖(最多))

介面與類之間的關係是實現關係。

虛線三角形箭頭

物件與物件的關係:

1.泛化(is a) —-實線三角形箭頭

2.關聯

1>聚合關係(has a) —共享關係 —- 可分離,即是沒有這個不影響物件的整體

2>組合關係(contains a) —強聚合—-不可分離的,eg :汽車和方向盤

——–箭頭的菱形是在擁有者的身上

3>依賴關係(use a)

1.滿足功能需求

2.滿足了也不一定是好設計

1.可讀性(注釋,**,演算法不要太複雜,盡量採用經典演算法)

2.可復用性(抽取父類,介面,方法)

3.可擴充套件性(面對需求變化時,難易程度)

4.可維護性(錯誤的修改,遺漏的功能新增)

內聚度乙個程式的某個單元負責的任務數量和多樣性。

內聚與單個類和單個方法單元相關。

———-乙個功能模組只做乙個事情

—————內聚的原因就是為了重用。

———————高內聚(乙個系統單元只負責乙個事情)

耦合度表示單元與單元之間的關聯程度。

耦合度決定了變更乙個應用程式的容易程度。

高內聚低耦合是所有優秀軟體的共同特徵。

需求改變的時候可以盡量不修改已有**,而是擴充套件其功能

乙個類僅有乙個引起他變化的原因,永遠不要讓乙個類存在讀個改變的理由。單一職責圍繞的所處環境的職責(不是指代的某個具體的功能)。

就是判斷兩個類該不該做繼承關係子類應該能夠完全替換父類能夠出現的地方,並且替換後,不會讓父類呼叫的客戶程式從行為上有任何改變

(不應該僅僅用生活知識(is a)來判斷)

是指兩個模組如果有依賴關係,那麼高層模組最好繫結依賴低層模組的抽象或者介面即是用呼叫的時候,用介面或者抽象類 來指向實現類。從而呼叫實現類裡面的方法(要針對介面程式設計,不要針對實現類程式設計)

優點:是如果以後如果需要修改的時候,就只需要從新寫乙個實現類,傳給介面指向,就不需要修改主**。

即是少用繼承。新物件需要使用到老物件的屬性或者方法,應該採用其他的一些方法來進行處理。比如包含住作為乙個屬性,但是盡量不要用extends。

最小介面原則(不要用上層介面汙染下層介面)

最小知識原則。乙個軟體實體應當盡可能少與其他實體相互摩擦。

eg : import 匯入的時候不要匯入過多,匯入操作的就可以了。

表示層專用模式:mvc模式

----------------m 模型 c 控制器 v檢視

v ---介面 c--listener

三層架構-(不是純物件導向的)----貧血模型

業務層裡面既有bean也有行為 ----復血模型

微觀(對應某個具體的問題和場景)
1.模式名稱

2.該模式能解決的問題

3.解決方案

4.使用該模式後的效果(優缺點)

根據設計模式是幹什麼的分類:
涉及物件的建立

*單列模式(即是只能建立乙個物件的)--singleton 模式

設計乙個能且只能產生乙個物件的類

1.單列模式預載入模式實現—懶漢模式。
1>預載入實現,就算你不用,也會在記憶體產生放起。

---------------優點:執行緒絕對安全的

public class singleton

public static singleton getinstance()

}

2.單列模式二 —————–餓漢模式。

1>延遲載入實現。只有真正要使用的時候才產生

2>不加同步執行緒不安全,加了同步效率就低—————

缺點:這是執行緒不安全的。

public class singleton

public static singleton getinstance()

return sin;

} }

3.單列模式三———-雙鎖模式

1>既支援延遲載入,又支援執行緒安全的高併發。

public class singleton

public static singleton getinstance()}}

return sin;

}}

*工廠模式

定義:集中建立例項物件

將客戶類和工廠類(eg:dbutil)分開。最常見的模式

由乙個類專門來產生物件,其餘類來使用物件。

解耦:物件的建立和使用分離

1.簡單工廠模式

乙個工廠生產多個物件

2.工廠方法模式

多個工廠生產同乙個物件

3.抽象工廠

產品和工廠都在變化,多個產品和多個工廠

建造者模式

*原型模式 prototype

建立乙個和已有的一模一樣的新物件。

注意:重寫的類必須實現cloneable —也只是乙個標誌性介面

轉殖的方法:對屬性的實現是用的值傳遞

1.淺轉殖

重寫object類的clone方法:

public object clone() throws clonenotsupportexception

2.深轉殖
轉殖的所有類實現cloneable 介面,serializable介面。

public 轉殖物件型別 deepclone(){

當前物件型別 newobject = null ;

objectoutputstream oos = null;

objectinputstream ois = null;

bytearrayoutputstream bos = null;

try finally

return newobject;

*facade外觀模式 eg:mvc

*介面卡模式(adaptor):

----即是 a b ,在c類中需要呼叫ab的方法。就是在c中包含住ab
*裝飾器模式decorator:
eg:io 管道對接用的就是裝飾器模式。

用的地方:東西有主次之分,

而且需要用次要的東西來修飾主的

**模式(proxy):
可以實現面向切面程式設計。也稱面向方向程式設計。
橋梁模式(bridge):
乙個型別有兩個或者多個維度的變化。沒有主次之分
觀察者模式

*命令模式

模版模式

設計模式 概要

設計模式分為三類 1.建立型 2.結構型 3.行為型。建立型 abstract factory 抽象工廠 物件建立型模式 builder 生成器 物件建立型模式 factory method 工廠方法 物件建立型模式 prototype 原型 物件建立型模式 singleton 單件 物件建立型模式...

設計模式 JAVA 概要

設計模式三大分類 不要存在多於乙個導致類結構變更的原因。也就是說每個類應該實現單一的職責。自己理解 乙個類一件事,不要貪多。發現貪多就拆分。任何基類出現的地方,子類一定可以出現。開閉原則的基礎。面向介面程式設計,依賴於抽象而不依賴於具體。寫 時用到具體類時,不與具體類互動,而與具體類的上層接 互。每...

設計模式之概要

對於很多人來說,設計模式是乙個很高大上的東西。當然,恰當的使用設計模式確實能達到事半功倍的效果,能幫助我們解決一些複雜的業務場景,減少耦合,讓我們的邏輯更清晰,更美觀,更具有維護性。但是,什麼時候該用設計模式?是不是只要符合設計模式的場景就要用設計模式呢?當然不是,使用設計模式一般要注重兩點 一,這...