04 行為型模式 中

2021-09-24 18:32:20 字數 4002 閱讀 9348

二、迭代子模式

三、命令模式

四、參考

1.3.1 被觀察者notic

public

inte***ce

notice

public

class

schoolnotice

implements

notice

}@override

public

void

addobserver

(observer observer)

public list

getobservers()

return collections.empty_list;

}public

boolean

removeobserver

(observer observer)

return

false;}

}

1.3.2 觀察者observer
public

inte***ce

observer

1.3.3 觀察者實現類
public

class

parent

implements

observer

}public

class

student

implements

observer

}public

class

teacher

implements

observer

}

1.3.4 測試
public

class

observertest

}

學生收到通知,很高興...

老師收到通知,可以休息一陣子...

家長收到通知,安排假期活動.

..

設計模式角色

作用抽象迭代子(iterator)角色

此抽象角色定義出遍歷元素所需的介面。

具體迭代子(concreteiterator)角色

此角色實現了iterator介面,並保持迭代過程中的游標位置。

聚集(aggregate)角色

此抽象角色給出建立迭代子(iterator)物件的介面。

具體聚集(concreteaggregate)角色

實現了建立迭代子(iterator)物件的介面,返回乙個合適的具體迭代子例項。

客戶端(client)角色

持有對聚集及其迭代子物件的引用,呼叫迭代子物件的迭代介面,也有可能通過迭代子操作聚集元素的增加和刪除。

2.3.1 iterable

public

inte***ce

iterable

}default spliterator

spliterator()

}

2.3.2 collection
public

inte***ce

collection

extends

iterable

2.3.3 abstractlist.itr
private

class

itrimplements

iterator

//實現的iterable中定義的遍歷元素相關介面

public e next()

catch

(indexoutofbound***ception e)

}//實現的iterable中定義的遍歷元素相關介面

public

void

remove()

catch

(indexoutofbound***ception e)

}//檢查聚集是否被通過非迭代子提供的方法修改過,如果被修改則fail fast

final

void

checkforcomodification()

}

2.3.4 arraylist
public iterator

iterator()

2.3.5 客戶端
public

class

iteratorpatterntest

iterator

iterator = list.

iterator()

;while

(iterator.

hasnext()

)}system.out.

println()

; iterator

iterator1 = list.

iterator()

;while

(iterator1.

hasnext()

)}}輸出:

9569

5922

6238970

7280

9522

3897072

80

如果乙個演算法開始之後,它的運算環境發生變化,使得演算法無法進行必需的調整時,這個演算法就應當立即發出故障訊號。這就是failfast的含義。如果

聚集物件的元素在乙個動態迭代子的迭代過程中發生變化時,迭代過程會受到影響而變得不能自恰。這時候,迭代子就應當立即丟擲乙個異常。這種迭

代子就是實現了fail fast功能的迭代子。

在itr類的源**中可以看到,方法checkforcomodification()會檢查聚集的內容是否剛剛被外界直接修改過(不是通過迭代子提供的方法修改的)。如果

在迭代開始後,聚集的內容被外界繞過迭代子物件而直接修改的話,這個方法會立即丟擲concurrentmodificationexception()異常。這就是說,

abstractlist.itr迭代子是乙個fail fast的迭代子。

設計模式角色

作用command(命令抽象類)

定義一組可以執行的操作介面。

concretecommand(具體命令類)

它持有receiver的引用,針對不同的命令執行具體的操作方法。

receiver(接受者)

定義執行者統一的介面,它可以是介面,也可以是具體實現類。

invoker(呼叫類)

它持有command的引用,執行具體命令類。

3.3.1 runnable介面

public

inte***ce

runnable

3.3.2 myrunnableimpl

3.3.3 executor介面

public

inte***ce

executor

3.3.4 threadpoolexecutor執行緒池
public future<

?>

submit

(runnable task)

public

void

execute

(runnable command)if(

isrunning

(c)&& workqueue.

offer

(command)

)elseif(

!addworker

(command,

false))

reject

(command)

;}

private

boolean

addworker

(runnable firsttask,

boolean core)

}finally

if(workeradded)}}

//省略非關鍵**

}

6 0行為型模式

行為型模式用於描述程式在執行時複雜的流程控制,即描述多個類或物件之間怎樣相互協作共同完成單個物件都無法單獨完成的任務,它涉及演算法與物件間職責的分配。行為型模式分為類行為模式和物件行為模式,前者採用繼承機制來在類間分派行為,後者採用組合或聚合在物件間分配行為。由於組合關係或聚合關係比繼承關係耦合度低...

26 行為型模式概述(行為型模式的分類)

行為型模式用於描述程式在執行時複雜的流程控制,即描述多個類或物件之間怎樣相互協作共同完成單個物件都無法單獨完成的任務,它涉及演算法與物件間職責的分配。行為型模式分為類行為模式和物件行為模式,前者採用繼承機制來在類間分派行為,後者採用組合或聚合在物件間分配行為。由於組合關係或聚合關係比繼承關係耦合度低...

14 行為型模式 職責鏈模式

模式動機 chain of responsibility pattern 對於某個請求,有多個接收者都可能處理,將這樣的接收者鏈結成乙個單向鍊錶,根據不同的請求型別決定最終由哪個結點負責處理。不同結點需要維護乙個指向下乙個結點的鏈結,該鏈結可以通過構造結點時傳入,也可以通過結點介面指定下乙個接收結點...