二、迭代子模式
三、命令模式
四、參考
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 觀察者observerpublic
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 collectionpublic
inte***ce
collection
extends
iterable
2.3.3 abstractlist.itrprivate
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 arraylistpublic 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 對於某個請求,有多個接收者都可能處理,將這樣的接收者鏈結成乙個單向鍊錶,根據不同的請求型別決定最終由哪個結點負責處理。不同結點需要維護乙個指向下乙個結點的鏈結,該鏈結可以通過構造結點時傳入,也可以通過結點介面指定下乙個接收結點...