設計模式筆記

2021-10-08 12:01:14 字數 4523 閱讀 6448

簡單工廠模式

工廠方法模式

抽象工廠模式

觀察者模式(發布-訂閱模式)

介面卡模式

裝飾器模式

狀態模式

外觀模式

開閉原則:對修改關閉,對擴充套件開發.我們軟體開發應當遵守這一原則.

確保乙個類在系統中僅有乙個例項,自行例項化並向這個系統提供這個例項.

要將建構函式設為private,防止外部呼叫,還有提供乙個getinstance方法返回例項.

使用場景:

1、要求生產唯一序列號。

2、web 中的計數器,不用每次重新整理都在資料庫裡加一次,用單例先快取起來。

3、建立的乙個物件需要消耗的資源過多,比如 i/o 與資料庫的連線等。

實現方式:

在第一次呼叫時例項化,防止記憶體浪費

public

class

instance

public

synchronized instance getinstance()

return instance;

}}

沒有加鎖,執行效率會提高,但浪費記憶體.

public

class

instance

public instance getinstance()

}

將建立物件的事交給工廠類來做,使物件的建立和使用分離

工廠中建立物件的方法通常為static

public

class

factorymode

}abstract

class

product

class

producta

extends

product

}class

productb

extends

product

}class

factory

else

if(name.

equals

("b"))

return product;

}}

但是如果要增加product的子類就要修改factory的**,違背了開閉原則

將工廠抽象出來,子工廠負責建立物件,不同的子工廠建立不同的物件.將子工廠的相同方法抽象出來,也可以理解為定義乙個建立產品物件的工廠介面,將實際建立工作推遲到子類當中。核心工廠類不再負責產品的建立,這樣核心類成為乙個抽象工廠角色,僅負責具體工廠子類必須實現的介面.

public

class

factorymethod

}abstract

class

factory

class

factorya

extends

factory

}class

factoryb

extends

factory

}abstract

class

product

class

producta

extends

product

}class

productb

extends

product

}

對所有工廠抽象成乙個超級工廠

public

class

abstractfactory

}abstract

class

supe***ctory

class

factorya

extends

supe***ctory

@override

public computer getcomputer()

}class

factoryb

extends

supe***ctory

@override

public computer getcomputer()

}class

macfactory

extends

supe***ctory

@override

public computer getcomputer()

}class

xiaomifactory

extends

supe***ctory

@override

public computer getcomputer()

}abstract

class

product

abstract

class

computer

class

producta

extends

product

}class

productb

extends

product

}class

macextends

computer

}class

xiaomi

extends

computer

}

定義物件間的一種一對多的依賴關係,當乙個物件(發布者)的狀態發生改變時,所有依賴於它的物件(觀察者)}都得到通知並被自動更新。

public

class

subject

public

void

setstate

(int state)

public

void

attach

(observer observer)

public

void

notifyallobservers()

}public

static

void

main

(string[

] args)

}

觀察者:

public

abstract

class

observer

class

observer1

extends

observer

@override

public

void

update()

}class

observer2

extends

observer

@override

public

void

update()

}

為乙個類擴充套件新功能,使類能和介面一起工作

public

class

carpublic

static

void

main

(string[

] args)

}inte***ce

flyclass

caradapter

implements

fly@override

public

void

flyinsky()

public

void

runandfly()

}

為乙個類新增新的功能而不改變原有結構

注意與介面卡模式的區別,介面卡模式是通過實現介面,是本地方法與介面中的方法能一起工作.裝飾器模式直接新增方法來擴充套件功能

public

class

carpublic

static

void

main

(string[

] args)

}class

cardecorator

public

void

fly(

)}

類狀態改變其行為也跟隨改變

需要乙個抽象的狀態類state和環境類context

state類封裝抽象的要改變的方法,不同狀態子類給予不同方法的實現

public

class

statemode

}abstract

class

state

class

fullgasstate

extends

state

}class

lessgasstate

extends

state

}class

carcontext

public

void

run(

)}

隱藏系統的複雜性,並向客戶端提供乙個客戶端可以訪問系統的介面。

用乙個類將需要的物件封裝成private,提供乙個public方法給外部呼叫.

設計模式筆記

1 類繼承與介面繼承的比較。物件的類與物件的型別的比較 乙個物件的類定義了物件怎麼樣實現的,同時也定義物件內部狀態和操作的實現。但是物件的型別只與他的介面有關,藉口即物件能響應的請求的集合。乙個物件可以有多個型別,不同的類物件可以有相同的型別。理解類繼承和介面繼承之間的差別也十分重要。類繼承根據乙個...

設計模式筆記

設計模式是一種真理,我們在沒有學習過設計模式時都會或多或少的與他不謀而合,但是學習過後我們可以把他從經驗性的東西提煉為理論性的,並且反過來再指導實踐,這應該就是我們學習並使用設計模式的初衷,這好比是政經中的價值規律,任何人都知道東西如果少了而需求大,它 馬上就漲,而反過來 就賤,可是學過政經後就可以...

設計模式筆記

設計模式精解p136,第11章 專家如何進行設計 alexander提到 從片段開始設計不是乙個好的設計方法。即將預先成型的部分新增在一起是無法得到優秀的軟體設計的。但還是可以得到可以工作的軟體的,只是大部分時候難於修改或擴充套件 我的觀點 軟體或者軟體系統都是由 功能模組 和這些 模組之間的聯絡 ...