java設計模式8.叠代子模式、責任鏈模式、命令模式
阿新 • • 發佈:2018-11-03
上傳 inf () inter args 如果 很多 java d參數
- 叠代子模式
叠代子模式可以順序地訪問一個聚集中的元素而不必暴露聚集的內部表象。它將叠代邏輯封裝到一個獨立的叠代子對象中,從而與聚集本身分開。叠代子對象是對遍歷的抽象化,不同的聚集對象可以提供相同的叠代子對象,從而使客戶端無需知道聚集的底層結構。一個聚集可以提供多個不同的叠代子對象,從而使得遍歷邏輯的變化不會影響到聚集對象本身。
- 示例:java集合類
Collection接口定義了iterator接口返回一個Iterator對象,在具體實現類ArrayList中返回一個私有的內部Iterator子類對象。這裏簡單畫一下常用的集合api類的關系圖,後面有時間再專門整理下java集合。java集合分兩部分。
Collection:
Map:
- 責任鏈模式
在責任鏈模式裏,很多對象由每一個對象對其下家的引用而連接起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求。發出這個請求的客戶端並不知道鏈上的哪一個對象最終處理這個請求,這使得系統可以在影響客戶端的情況下動態地重新組織鏈和分配責任。
- 抽象處理者:定義出一個處理請求的接口。如果需要,接口可以定義出一個方法,以設定和返回對下家的引用。
- 具體處理者:具體處理者接到請求後,可以選擇將請求處理掉,或者傳給下家。
- 命令模式
命令模式是對命令的封裝,把發出命令的責任和執行命令的責任分割開,委派給不同的對象(命令對象確定具體由哪接收者怎樣執行,請求者確定怎樣發出哪個命令)。每一個命令都是一個操作:請求的一方發出請求要求執行一個操作;接收的一方收到請求,並執行操作。命令模式允許請求的一方和接收的一方獨立開來,使得請求的一方不必知道接收請求的一方的接口,更不必知道請求是怎麽被接收,以及操作是否被執行,何時執行以及怎麽執行。
- 客戶角色Client:創建一個具體命令對象並確定其接收者。
- 命令角色Command:聲明一個給所有具體命令類的抽象接口。
- 具體命令角色ConcreteCommand:定義一個接收者和行為之間的弱耦合;實現execute()方法,負責調用接收者的相應操作。
- 請求者角色Invoker:負責調用命令對象執行請求。
- 接收者角色Receiver:負責具體實施和執行一個請求,任何一個類都可以成為接收者。
public class Client { public static void main(String[] args) { Receiver receiver= new Receiver(); Command command = new ConcreteCommand(receiver); Invoker invoker = new Invoker(command); invoker.action(); } }
// Invoker的構造接收Command參數,並提供一個action()方法作為行動方法 public class Invoker { private Command command; public Invoker(Command command){ this.command = command; } public void action(){ command.execute(); } }
// Receiver是命令的接收者,在命令的控制下執行action() public class Receiver { public Receiver(){ } public void action(){ System.out.println("action"); } }
public interface Command { void execute(); }
public class ConcreteCommand implements Command { public Receiver receiver; public ConcreteCommand(Receiver receiver){ this.receiver = receiver; } @Override public void execute() { receiver.action(); } }
#筆記內容參考《java與模式》
java設計模式8.叠代子模式、責任鏈模式、命令模式