JavaOO設計模式概要(試用markdown)
Java 面向物件設計(OOAD)
OOAD
面向物件的分析與設計。
程式設計方法
軟體工程學:是指導計算機軟體開發和維護的一門工程學科。採用工程化的方法開發維護。
軟體工程三要素
- 方法 :完成軟體開發各項任務的技術方法(面向物件方法)
- 工具 : EA(為運用方法提供的自動或者半自動的軟體工程支撐環境)
- 過程 : 基於原型的增量迭代軟體開發過程(一系列任務的框架)
軟體生命週期
(尋找商機,投標等等)
專案:有明確的需求的提出方
產品:沒有明確的需求提出方,根據市場需求,自己提需求,自己設計
1.可行性分析階段
技術可行性、資金可行性、人員可行性、…………
主要成果:可行性分析報告
2.需求分析階段
確定待開發的系統是”做什麼”
確定軟體系統的功能需求和非功能需求。
主要成果:軟體需求規格說明書(Software Requirements Specification,即SRS)
3.系統設計階段。
主要成果:概要設計說明(分幾層),詳細設計說明(介面,bean的提取)、資料庫 ,設計說明書。
4.系統實現階段(也稱編碼階段)
主要成果:通過單元測試的原始碼
5.測試階段。
通過各種測試方法和工具,使bug降到最低
主要成果:軟體測試報告
6.維護階段。
主要任務:通過各種必要的維護活動使系統持久的滿足使用者的需要。
維護活動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.可維護性(錯誤的修改,遺漏的功能新增)
指標考量
內聚度
一個程式的某個單元負責的任務數量和多樣性。
內聚與單個類和單個方法單元相關。
———-一個功能模組只做一個事情
—————內聚的原因就是為了重用。
———————高內聚(一個系統單元只負責一個事情)
耦合度
表示單元與單元之間的關聯程度。
耦合度決定了變更一個應用程式的容易程度。
高內聚低耦合是所有優秀軟體的共同特徵。
設計原則:
1.開閉原則(是所有原則的核心原則)
需求改變的時候可以儘量不修改已有程式碼,而是擴充套件其功能
2.單一職責SRP。
一個類僅有一個引起他變化的原因,永遠不要讓一個類存在讀個改變的理由。單一職責圍繞的所處環境的職責(不是指代的某個具體的功能)。
3.里氏替換原則
就是判斷兩個類該不該做繼承關係子類應該能夠完全替換父類能夠出現的地方,並且替換後,不會讓父類呼叫的客戶程式從行為上有任何改變
(不應該僅僅用生活知識(is a)來判斷)
4.依賴倒轉原則
是指兩個模組如果有依賴關係,那麼高層模組最好繫結依賴低層模組的抽象或者介面即是用呼叫的時候,用介面或者抽象類 來指向實現類。從而呼叫實現類裡面的方法(要針對介面程式設計,不要針對實現類程式設計)
優點:是如果以後如果需要修改的時候,就只需要從新寫一個實現類,傳給介面指向,就不需要修改主程式碼。
5.組合/聚合複用原則。
即是少用繼承。新物件需要使用到老物件的屬性或者方法,應該採用其他的一些方法來進行處理。比如包含住作為一個屬性,但是儘量不要用extends。
6.介面隔離原則
最小介面原則(不要用上層介面汙染下層介面)
7.迪米特法則
最小知識原則。一個軟體實體應當儘可能少與其他實體相互摩擦。
eg : import 匯入的時候不要匯入過多,匯入操作的就可以了。
模式分類
1.架構模式(eg:三層架構)巨集觀概念
表示層專用模式:MVC模式
----------------M 模型 C 控制器 V檢視
V ---介面 C--Listener
三層架構-(不是純面向物件的)----貧血模型
業務層裡面既有bean也有行為 ----復血模型
2.設計模式
微觀(對應某個具體的問題和場景)
模式包含的要素
1.模式名稱
2.該模式能解決的問題
3.解決方案
4.使用該模式後的效果(優缺點)
設計模式
根據設計模式是幹什麼的分類:
1.建立模式
涉及物件的建立
*單列模式(即是隻能建立一個物件的)--Singleton 模式
設計一個能且只能產生一個物件的類
1.單列模式預載入模式實現—懶漢模式。
1>預載入實現,就算你不用,也會在記憶體產生放起。
---------------優點:執行緒絕對安全的
public class Singleton{
private static Singleton sin = new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return sin;
}
}
2.單列模式二 —————–餓漢模式。
1>延遲載入實現。只有真正要使用的時候才產生
2>不加同步執行緒不安全,加了同步效率就低—————
缺點:這是執行緒不安全的。
public class Singleton{
private static Singleton sin;
private Singleton(){
}
public static Singleton getInstance(){
if(sin == null){
sin = new Singleton();
}
return sin;
}
}
3.單列模式三———-雙鎖模式
1>既支援延遲載入,又支援執行緒安全的高併發。
public class Singleton{
private static Singleton sin;
private Singleton(){
}
public static Singleton getInstance(){
if(sin == null){
synchronized(Singleton.class){
if(sin == null){
sin = new Singleton();
}
}
}
return sin;
}
}
*工廠模式
定義:集中建立例項物件
將客戶類和工廠類(eg:DBUtil)分開。最常見的模式
由一個類專門來產生物件,其餘類來使用物件。
解耦:物件的建立和使用分離
1.簡單工廠模式
一個工廠生產多個物件
2.工廠方法模式
多個工廠生產同一個物件
3.抽象工廠
產品和工廠都在變化,多個產品和多個工廠
建造者模式
*原型模式 Prototype
建立一個和已有的一模一樣的新物件。
注意:重寫的類必須實現Cloneable —也只是一個標誌性介面
克隆的方法:對屬性的實現是用的值傳遞
1.淺克隆
重寫Object類的clone方法:
public Object clone() throws CloneNotSupportException{
return super.clone();
}
2.深克隆
克隆的所有類實現Cloneable 介面,Serializable介面。
public 克隆物件型別 deepClone(){
當前物件型別 newObject = null ;
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
ByteArrayOutputStream bos = null;
try{
bos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(bos);
oos.writeObject(this);
ois = new ObjectInputStream(new ByteArrayInputStream(bos.toByteArray()));
newObject =(克隆物件型別) ois.readObject();
} finally{
………………
}
return newObject;
}
2.結構模式 :涉及類與物件的組合
*Facade外觀模式 eg:MVC
*介面卡模式(Adaptor):
----即是 A B ,在C類中需要呼叫AB的方法。就是在C中包含住AB
*裝飾器模式Decorator:
eg:IO 管道對接用的就是裝飾器模式。
用的地方:東西有主次之分,
而且需要用次要的東西來修飾主的
代理模式(Proxy):
可以實現面向切面程式設計。也稱面向方向程式設計。
橋樑模式(Bridge):
一個型別有兩個或者多個維度的變化。沒有主次之分
3.行為模式:對於類和物件職責方法的設計
觀察者模式
*命令模式
模版模式
相關推薦
JavaOO設計模式概要(試用markdown)
Java 面向物件設計(OOAD) OOAD 面向物件的分析與設計。 程式設計方法 軟體工程學:是指導計算機軟體開發和維護的一門工程學科。採用工程化的方法開發維護。 軟體工程三要素 方法 :完成軟體開發各項任務的技術方法
java設計模式系列之設計模式概要(1)
而不是 行為型模式 一句話 創建 rom 多次 ati 代理模式 之間 一、什麽是設計模式 設計模式(Design pattern)是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。
Java 設計模式系列(十六)觀察者模式(Observer)
for out 其中 如果 observer 業務 ets 同時 hang Java 設計模式系列(十六)觀察者模式(Observer) 觀察者模式是對象的行為模式,又叫發布-訂閱(Publish/Subscribe)模式、模型-視圖(Model/View)模式、源-監聽
Java 設計模式系列(二三)訪問者模式(Vistor)
聚集 哪些 true 由於 clas .com concrete 為什麽 type Java 設計模式系列(二三)訪問者模式(Vistor) 訪問者模式是對象的行為模式。訪問者模式的目的是封裝一些施加於某種數據結構元素之上的操作。一旦這些操作需要修改的話,接受這個操作的數
JAVA設計模式——代理(靜態代理)
具體實現 使用 *** inter ali pro eal 成功 dem 定義 為其它的對象提供一種代理,以控制這個對象的訪問 使用場景 當不想直接訪問某個對象的時候,就可以通過代理 1.不想買午餐,同事幫忙帶 2.買車不用去廠裏,去4s店 3.去代理點買火車票,不用去車站
JAVA設計模式——代理(動態代理)
生成 底層 exe 加載器 use 有一個 隨筆 for oca 傳送門:JAVA設計模式——代理(靜態代理) 序言: 在學習Spring的時候,我們知道Spring主要有兩大思想,一個是IoC,另一個就是AOP,對於IoC,依賴註入就不用多說了,而對於Spri
PHP 流行設計模式示例(經過驗證)
《設計模式簡介》 設計模式:提供了一種廣泛的可重用的方式來解決我們日常程式設計中常常遇見的問題。設計模式並不一定就是一個類庫或者第三方框架,它們更多的表現為一種思想並且廣泛地應用在系統中。它們也表現為一種模式或者模板,可以在多個不同的場景下用於解決問題。設計模式可以用於加速開發,並且將很多大的想
23種設計模式之(十九)備忘錄模式(python_c++實現) .md
23種設計模式之(十九)備忘錄模式(Memento) 本文主要介紹23種設計模式之備忘錄模式,附詳細python/c++示例程式碼。 概念 應用場景 注意事項 程式碼示例 總結 程式碼連結 備忘錄模式(Memento) 概念 備忘錄模式,是行為模式之一,它
23種設計模式之(二十三)迭代器模式(python_c++實現) .md
23種設計模式之(二十三)迭代器模式(Iterator) 本文主要介紹23種設計模式之迭代器模式,附詳細python/c++示例程式碼。 概念 應用場景 注意事項 程式碼示例 總結 程式碼連結 迭代器模式(Iterator) 概念 迭代模式,是行為模式之一
javascript設計模式-Constructor(構造器)模式
Constructor是一種在記憶體已分配給該物件的情況下,用於初始化新建立物件的特殊方法。Object構造器用於建立特定型別的物件–準備好物件以備使用,同事接收構造器可以使用引數,以在第一次建立物件時,設定成員屬性和方法值。 物件建立 創新新物件,在jav
PHP設計模式系列(二十三):訪問者模式
訪問者模式 表示一個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。 模式結構 抽象訪問者角色(Visitor):為該物件結構(Object
模板方法設計模式擴充套件(Hook Method)
package Template_Method_Pattern; import java.util.Scanner; /** * 模板方法模式的擴充套件 * 鉤子方法(Hook Method) * @author dd * */ public cl
設計模式示例(C++實現)
最近參加了軟考,在準備考試過程中發現其中給出設計類圖讓通過指定的設計模式進行設計的題目對於練習C++和軟體開發是一種不錯的的方式,因為學校中的C++課程只講C++語言,雖然也講了封裝、繼承、多型等特性,但是缺少相應的練習,使得沒有深入的認識和理解。同時類似於程式
設計模式學習(C++實現)7——介面卡模式、裝飾器模式、代理模式、外觀模式
介面卡模式、裝飾器模式、代理模式和外觀有些類似,又有些不同,他們的實現形式差不多,都是對已有的方法和類進行封裝,以實現適配、增強、加以控制或隱藏系統複雜性的目的 1 介面卡模式 例如多功能讀卡器,可插入多種不同的卡,完成讀取資料的功能。 class C
設計模式學習(C++實現)9——責任鏈模式
某個事件有一系列的處理者都可能處理,因此將這些處理者用一個連結串列連線起來,將該事件延該連結串列依次傳遞,一旦某個處理者解決該事件就不再繼續傳遞,自定義該連結串列可保證處理者的優先順序,這種模式可以保證系統的處理順序按照設定順序來而不至於變得混亂,可應用於大部分
軟體設計模式學習(十五)享元模式
> 當系統中存在大量相同或相似的物件時,享元模式是一種較好的解決方案,它通過共享技術實現相同或相似的細粒度物件的複用,從而節約記憶體空間。享元模式提供了一個享元池用於儲存已經建立好的享元物件,並通過享元工廠類將享元物件提供給客戶端使用。 ## 模式動機 使用面向物件技術開發時,很多情況下需要在系統
軟體設計模式學習(十六)代理模式
> 當直接訪問某些物件存在問題時,可以通過一個代理物件來間接訪問,為了保證客戶端使用的透明性,所訪問的真實物件與代理物件需要實現相同的介面。 ## 模式動機 某些情況下,一個客戶不想或不能直接引用一個物件,此時可以通過一個稱之為代理的第三者實現間接引用。代理物件在客戶端和目標物件之間起到中介作用,
軟體設計模式學習(十七)職責鏈模式
> 系統中如果存在多個物件可以處理一個同一請求,可以通過職責鏈模式將這些處理請求的物件連成一條鏈,讓請求沿著該鏈進行傳遞。如果鏈上的物件可以處理該請求則進行處理,否則將請求轉發給下家處理 ## 模式動機 很多情況下,可以處理某個請求的物件不止一個,如大學裡的獎學金審批,學生先向輔導員提交審批表,輔
軟體設計模式學習(十八)命令模式
> 命令模式將請求傳送者與請求接收者解耦,在傳送者與接收者之間引入命令物件,將傳送者的請求封裝在命令物件中,請求傳送者通過命令物件來間接引用接收者,使得系統具有更好的靈活性,使用者可以根據需要為請求傳送者增加新的命令物件而無須修改原有系統 ## 模式動機 舉個現實生活中的例子,開關是請求的傳送者,
軟體設計模式學習(十九)直譯器模式
> 直譯器是一種不常使用的設計模式,它用於描述如何構成一個簡單的語言直譯器,主要應用於使用面嚮物件語言開發的編譯器和直譯器設計。當我們需要開發一個新的語言時,可以考慮使用直譯器模式 ## 模式動機 如果在系統中某一特定型別的問題發生的頻率很高,此時可以考慮將這些問題的例項表述為一個語言中的句子。再