JAVA設計模式 命令模式

2021-08-15 03:41:17 字數 2882 閱讀 8575

命令模式,又稱為行動(action)模式、交易(transaction)模式,是一種行為型設計模式。命令模式的思想是:把乙個請求或者操作封裝到乙個物件中,允許系統使用不同的請求把客戶端引數化,從而實現對請求排隊或者記錄請求日誌、提供命令的撤銷和恢復功等能

命令模式涉及5個角色:

結構圖:

具體**實現:

// 接收者

public

class

receiver

}// 抽象命令

public

inte***ce

command

// 具體命令

public

class

concretecommand

implements

command

@override

public

void

execute()

}// 請求者

public

class

invoker

public

void

action()

}// 客戶

public

class

client

}// 測試

class commandtest

}

執行結果:

hey geek!!

可以看到請求者和接收者是松耦合的,因此要增刪命令很容易就可以實現。

// 錄音機,相當於接收者,實際上的功能擁有者

public

class

audioplayer

public

void

rewind()

public

void

stop()

}// 抽象命令

public

inte***ce

command

public

class

playcommand

implements

command

@override

public

void

execute()

}// 倒帶命令

public

class

rewindcommand

implements

command

@override

public

void

execute()

}// 停止命令

public

class

stopcommand

implements

command

@override

public

void

execute()

}// 按鍵,相當於請求者

public

class

keypad

public

void

setrewindcommand(command rewindcommand)

public

void

setstopcommand(command stopcommand)

public

void

play()

public

void

rewind()

public

void

stop()

}// 抽象巨集

public

inte***ce

macro

// 具體巨集

public

class

macrocommand

implements

macro

@override

public

void

removelast()

@override

public

void

execute()

}// 使用者

public

class

user

// 方法二:使用巨集的方式執行請求

public

void

method2()

}// 測試

class commandtest

}

執行結果:

playing…

stopped!!

rewinding…

playing…

stopped!!

**********

playing…

stopped!!

rewinding…

stopped!!

命令模式使得發起命令的物件——客戶,和具體實現命令的物件——接收者物件完全解耦,也就是說發起命令的物件完全不知道具體實現物件是誰,也不知道如何實現。

命令模式把請求封裝起來,可以動態地對它進行引數化、佇列化和日誌化等操作,從而使得系統更靈活。

命令模式中的命令物件能夠很容易地組合成復合命令,也就是巨集命令,從而使系統操作更簡單,功能更強大。

由於發起命令的物件和具體的實現完全解耦,因此擴充套件新的命令就很容易,只需要實現新的命令物件,然後在裝配的時候,把具體的實現物件設定到命令物件中,然後就可以使用這個命令物件,已有的實現完全不用變化。

Java設計模式 命令模式

命令模式定義 命令模式通過被稱為command的類封裝了對目標物件的呼叫行為以及呼叫引數。將乙個請求封裝稱為乙個命令,從而使你不同的請求對客戶進行引數化 隊請求排隊或記錄請求日誌,以及支援可撤銷的操作。優點 解耦了呼叫者與接受者之間的聯絡。呼叫者呼叫乙個操作,接受者接受請求執行相應的動作,因為使用命...

java設計模式 命令模式

1.概念 將來自客戶端的請求傳入乙個物件,從而使你可用不同的請求對客戶進行引數化。用於 行為請求者 與 行為實現者 解耦,可實現二者之間的松耦合,以便適應變化。分離變化與不變的因素。在物件導向的程式設計中,乙個物件呼叫另乙個物件,一般情況下的呼叫過程是 建立目標物件例項 設定呼叫引數 呼叫目標物件的...

java設計模式 命令模式

package com.hcmony.command author hcmony since v1.0.0,2018 04 09 17 18 public inte ce commandinteface package com.hcmony.command author hcmony since v...