JAVA模式(持續更新)

1、UML包含幾種類圖

1、結構型圖:類圖、構件圖、部署圖
2、行爲型圖:使用案例圖、時序圖、狀態圖、合作圖、活動圖
3、類圖結構:自上至下包含類名、屬性、方法以及性質
類名:正體字爲具體類,斜體字爲抽象類,加蓋Interface標識爲接口
屬性:+表示public;-表示爲private;#表示爲protected
方法:+表示public;-表示爲private;#表示爲protected;加下劃線爲靜態方法
性質層:由一個屬性、取值函數和賦值函數組成
1)類圖。類圖描述一組類、接口、協作和它們之間的關係。在OO系統建模中,最常見的圖就是類圖。類圖給出了系統的靜態設計視圖,活動類的類圖給出了系統的靜態進程視圖。
2)對象圖。對象圖描述一組對象及它們之間的關係。對象圖描述了在類圖中所建立的事物實例的靜態快照。和類圖一樣,這些圖給出系統的靜態設計視圖或靜態進程視圖,但它們是從真實實例或原型案例的角度建立的
3)構件圖。構件圖描述一個封裝的類和它的接口、端口,以及由內嵌的構建和連接件構成的內部結構。構件圖用於表示系統的靜態設計實現視圖。對於由小的部件構建大的系統來說,構件圖是很重要的。構建圖是類圖的變體
4)組合結構圖。組合結構圖描述結構化類(如構件或類)的內部結構,包括結構化類與系統其餘部分的交互點。組合結構圖用於畫出結構化類的內部內容
5)用例圖。用例圖描述一組用例、參與者及它們之間的關係。用例圖給出系統的靜態用例視圖。這些圖在對系統的行爲進行組織和建模時是非常重要的。
6)順序圖。順序圖是一種交互圖,交互圖展現了一種交互,由一組對象或參與者以及它們之間可能發送的消息構成。交互圖專注預提性的動態視圖。順序圖是強調消息的時間次序的交互圖。
7)通信圖。通信圖也是一種交互圖,強調收發消息的對象或參與者的結構組織,該圖反應了對象之間的消息交互,於順序圖想死,但與順序圖不同的是,協作圖不但描述了對象之間的交互還描述了交互對象之間的鏈接關係。即通信圖同時反映了系統的動態和靜態特徵。通信圖成爲協作圖。
8)定時圖。定時圖也是一種交互圖,強調消息跨越不同對象或參與者的實際時間,而不僅僅只是關心消息的相對順序。
9)狀態圖。狀態圖描述一個狀態機,由狀態、轉移、時間和活動組成。狀態圖給出了對象的動態視圖。它對於接口、類或協作的行爲建模尤爲重要,而且它強調事件導致的對象行爲,有助於對反應式系統建模。
10)活動圖。活動圖將進程或其他計算結構展示爲計算內部一步步的控制流和數據流。活動圖專注於系統的動態視圖。它對系統的功能建模和業務流程建模特別重要,並強調對象間的控制流程。
11)部署圖。部署圖描述對運行時的處理節點及在其中生存構建的配置。部署圖給出了架構的靜態部署視圖,通常一個節點包含一個或多個部署圖。
12)製品圖。製品圖描述計算機中的一個系統的物理結構。製品包括文件、數據庫和類似物理比特集合。製品圖通常與部署圖一起使用。製品也給出了他們實現的類和構建
13)包圖。包圖描述由模型本身分解而成的組織單元,以及他們之間的依賴關係。
14)交互概覽圖。交互概覽圖是活動圖和順序圖的混合物。
其中結構性視圖包括類圖、對象圖、包圖、組合結構圖、構件圖、部署圖和製品圖,而行爲性視圖包括用例圖、順序圖、通信圖、定時圖、狀態圖、活動圖、交互概覽圖。其中順序圖、通信圖、定時圖和交互該藍圖統稱爲交互圖。

2、類圖之間的關係

1、一般化關係:主要表示類與類的繼承、接口與接口之間的繼承、以及類與接口之間的實現;
2、關聯關係:是類與類之間的聯接,它使一個類知道另一個類的屬性和方法;分爲單向關聯與雙向關聯;單向關聯由實線一個箭頭組成,箭頭表示關聯方向;雙向關聯由雙箭頭或者無箭頭來表示,不過大部分爲單向關聯;例如:

public class drive{
    private Car car //UML 用 -car :Car來表示
}

3、聚合關係:是關聯關係的一種是強的關聯關係。聚合是整體與個體之間的關係。例如汽車類與引擎類、論壇類;
由空三角、實線、以及箭頭組成。通過實例變量來實現兩者的聚合關係。例如:

public class Car{
    private Engine engine;
    private Tire[] tires;
    //UML圖 表示方法爲
    //- engine:Engine
    //- tires:Tire[]
}

4、合成關係:也是關聯關係的一種,是比聚合關係強的關係。由實心三角、實線和箭頭來表示。例如 Person與limb之間的關係

public class Person{
private Limb limb;
//UML表示爲:-limb:Limb
}

5、依賴關係:依賴也是類與類之間的連接,依賴總是單向的,無雙向依賴關係。由虛線、箭頭來組成,箭頭表示依賴方向。例如:

public class Person{
    public void buy(Car car){
    car.method();
}
//+buy:void ------->Car
public String buy(House house){
    return house.method();
}
}
// +buy:String ----->House

3.PLANTUML類圖應用

3.1. 類圖關係

♦ 泛化:屬於繼承關係;符號: - -|> 表現形式: 實線+實心三角
♦實現: 接口實現關係;符號: . .|> 表現形式:虛線+空三角
♦關聯: 類之間引用關係關係表示類與類之間的連接,它使得一個類知道另外一個類的屬性和方法。符號:*.. 例如 類A 類B public B someTing(){ return B} ;表現形式:0.. 虛線
♦聚合:類之間整體與局部的關係 強於關聯,但在代碼層面聚合與關聯是一致的,只能從語義上來區分。:符號:o– 空四邊形+實線+箭頭
&diams:組合:比聚合更強,是一種強聚合關係。它同樣體現整體與部分的關係,但此時整體與部分是不可分的,整體生命週期的結束也意味着部分生命週期的結束體現在代碼層面與關聯時一致的,只能從語義來區分。符號:*– 實心四邊形+實線+箭頭
&diams:依賴:表示類與類之間的連接,表示一個類依賴於另外一個類的定義,依賴關係時是單向的。簡單理解就是類A使用到了類B,這種依賴具有偶然性、臨時性,是非常弱的關係。符號–>: 表現形式:實線+箭頭

3.2 PLANTUML類圖注意細節

3.2.1 類之間 方向控制

–up–>,–down–>,–left–>,–right–>,

3.2.2 類之間說明

Class A –|> Class B: 類之間說明

3.2.3 類下方法說明與靜態 抽象方法與類

Class A{
  {static/abstract} Object function{}
}--> 在實際測試的時候,此處大括號 調整到與A 同一行纔可,否則報錯 no Package or namespace definded

♦ 抽象類 定義 abstract class A
&diams:接口定義: interface class A

3.2.4 註釋,連接上的註釋和隱藏字段

♦註釋:note left of Class A:….;note right of …:”note somthing”; note up of… note down of …
♦ 連接上的註釋:note on link #red: ‘note something’
♦ hide Class /hide functions

3.2.5 權限

♦-:private
♦~ package private
♦#:protected
♦+:public

4、java設計遵循的原則

1、開閉原則:一個軟件實體應當對擴展開發,對修改關閉。用面向對象的語言來講,不允許修改的是系統的抽象層,而允許擴展的是系統的實現層。實現開閉原則的關鍵步驟就是抽象化,而基類與子類的繼承關係就是抽象化的具體實現。
2、里氏代換原則:是對開-閉原則的補充,也就是說任何基類可以出現的地方,子類一定可以實現。
3、接口隔離原則:應當爲客戶端幾桶儘可能小的單獨的接口,而不是提供大的總接口。
4、依賴倒轉原則:要依賴於抽象,不能依賴於實現。
5、合成/聚合複用原則:要儘量使用合成/聚合關係,而不是繼承關係達到複用的目的。合成/聚合複用原則是與里氏代換原則相輔相成的,兩者都是對實現“開-閉原則”的具體步驟的規範,前者要求設計師首先考慮合成/聚合關係,後者要求在使用繼承關係時,必須確定這個關係是符合一定條件的。
6、迪米特法則:一個軟件實體應當與儘可能少的其他實體發生相互作用。
7、遵循接口隔離原則與迪米特法則,會使一個軟件系統在功能擴展的過程當中,不會將修改的壓力傳遞到其它對象中.

5、planUML與UML Support簡介

  當然討論java模式離不開UML設計,UML設計目前我使用PlantUML與IDEA集成,使用UML Support查看分析程序內各類的依賴.現在介紹一下 PlantUML插件繪製UML圖.
  PlantUML目前是主流的UML繪製軟件,可以較好的與各個IDE進行集成,主要使用以下幾部分內容:
  ♦新建一個unititled Text File 輸入語法爲:
@startuml @enduml自動編譯的開始和結束標誌;例如:


package com.xu81.uml{
    class TestA{
    -String name
    -int id
}
  class TestB extends TestA{
    -String desc
    +String getDesc()
    +void setDesc(String desc)
}
}//兩者爲繼承:一般化關係

  ♦plantUml類圖構建說明
  ♦package:包關鍵字
  ♦+表示方法或屬性爲public
  ♦-表示方法或屬性爲private
  ♦沒有括號表示爲屬性
  ♦有括號表示爲方法
  ♦extends:繼承關鍵字也可以用符號: –|>
  ♦順序圖用->,–><-,<–來繪製參與者之間的消息.


5.JAVA模式

5.1 簡單工廠模式

簡單工程模式就是由一個工廠類根據傳入的參量決定創建出哪一種產品類的實例.簡單模式涉及到工廠角色/抽象產品角色以及具體產品角色等三個角色.
- 工廠類角色:擔任這個角色的是工廠方法模式的核心,含有與應用緊密相關的商業邏輯.工廠類在客戶端的直接調用下創建產品對象,它往往由一個具體java類實現.
- 抽象產品角色:擔任這個角色的類是由工廠方法模式所創建的對象的父類,或他們共同擁有的接口.抽象產品角色可以用一個java接口或者java抽象類實現
- 具體產品角色:工廠方法模式所創建的額任何對象都是這個角色的實例,具體產品角色由一個具體java類實現.

5.2 工廠方法模式

工廠方法模式是簡單工廠模式的進一步抽象和推廣;在工廠方法模式中,核心的工廠類不再負責所有的產品的創建,而是將具體創建的工作交給子類去做,這個核心類則搖身一變,成爲了一個抽象工廠角色,僅負責給出具體工廠子類必須實現的接口.
工廠方法模式的系統涉及到以下角色:
- 抽象工廠角色
- 具體工廠角色
- 抽象產品角色
- 具體產品角色

5.3 單例模式與多例模式

5.3.1 單例模式特點

1.單例類只能有一個實例
2.單例類必須自己創建自己的實例
3.單例類可以給所有對象提供這一實例
- 餓漢式單例類

public class EageSinleton{
    private static final EageSinleton m_instance=new EageSinleton();
    //私有構造化方法
    private EageSinleton(){}
    //靜態化工廠方法
    public static EageSinleton getInstance(){
    return m_instance;
}
}
  • 懶漢式單例類
public class EageSinleton{
    private static final EageSinleton m_instance=null; 
    //私有構造化方法
    private EageSinleton(){}
    //靜態化工廠方法
     synchronized public static EageSinleton getInstance(){
        if(m_instance==null){
            m_instance=new EageSinleton();
    }
    return m_instance;
}
}
  • 有狀態單例類:有狀態的可變的單例對象常常當做狀態庫使用,比如一個單例對象可以持有一個int類型的屬性,用來給一個系統提供一個數值唯一的序列號碼
  • 無狀態單例類:沒有狀態的單例類僅用作提供工具性函數的對象。

5.3.2 多例模式特點

多例類可有多個實例;
多例類必須自己創建.管理自己的實例,並像外界提供自己的實例

5.4 建造模式

建造模式涉及到四個角色:
抽象建造者角色:給出一個抽象接口
具體建造者角色:擔任這個角色的是與應用程序緊密相關的一些類,他們在應用程序調用下創建產品的實例。這個角色要完成的任務包括:實現抽象建造者Builder所聲明的接口,給出一步一步完成創建產品實例的操作。
建造過程完成後,提供產品的實例
導演者角色:擔任這個角色的類調用具體建造者角色以創建產品對象。導演者角色並沒有產品類的具體指示,真正擁有產品類的具體知識的是具體建造者角色
產品角色:產品便是建造中的複雜對象。一般來說,一個系統中會有多餘一個產品的產品類,而且這些產品類並不一定有共同的接口

5.5 原始模式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章