設計模式(十四) 命令模式

2021-09-29 05:36:59 字數 3574 閱讀 5204

一、概述

官方解釋:encapsulate a request as an object,thereby letting you parameterize clients with different requests,queue or log requests, and support undoable operations.(將乙個請求封裝成乙個物件,從而讓你使用不同的請求把客戶端引數化,對請求排隊或者記錄請求日誌,可以提供命令的撤銷和恢復功能。)

我的理解:將命令類command引用注入到傳送者類invoker中,將接收者receiver注入到命令類command中,通過命令類command作為中間類將傳送者invoker和接收者receiver解耦。

參與者:傳送者invoker、接收者receiver、命令類(抽象命令類abstractcommand、具體命令類concretecommand1、concretecommand2)

類圖:

二、**

**1(單純的命令模式結構):

package mypackage;

public class designpatterndemo

}class invoker

public void setcommand(command command)

public void call()

}class receiver

}abstract class command

public abstract void execute();

}class concretecommand extends command

}

輸出:

receiver action
**2——窗體命令例項:

package mypackage;

public class designpatterndemo

}class windowinvoker

public void setcommand(command command)

public void min()

}class windowreceiver

}abstract class command

public abstract void min();

}class windowcommand extends command

}

輸出:

窗體最小化到托盤
**3——窗體命令例項(命令類中方法擴充套件):

package mypackage;

public class designpatterndemo

}class windowinvoker

public void setcommand(command command)

public void min()

public void max()

public void close() }

class windowreceiver

public void max()

public void close()

}abstract class command

public abstract void min();

public abstract void max();

public abstract void close();

}class windowcommand extends command

@override

public void max()

@override

public void close()

}

輸出:

窗體最小化到托盤

窗體最大化到螢幕

窗體關閉

**4——**3的優化,便於後面擴充套件:

package mypackage;

public class designpatterndemo

}class windowinvoker

public void setcommand(command command)

public void call(string key) }

class windowreceiver

public void max()

public void close()

}abstract class command

public abstract void execute(string key);

}class windowcommand extends command }

}

輸出:

窗體最小化到托盤

窗體最大化到螢幕

窗體關閉

**5——擴充套件乙個concretecommand:

package mypackage;

public class designpatterndemo

}class invoker

public void setcommand(command command)

public void call(string key) }

class windowreceiver

public void max()

public void close()

}class menureceiver

public void menuclose()

}abstract class command

public void setmenureceiver (menureceiver menureceiver)

public abstract void execute(string key);

}class windowcommand extends command }

}class menucommand extends command

}}

輸出5:

窗體最小化到托盤

窗體最大化到螢幕

窗體關閉

選單開啟

選單關閉

三、小結

設計模式只重其意不重其行,上面5段**:

第一段介紹命令模式的**形式;

第二段結合窗體命令;

第三段在concretecommand具體命令類中擴充套件了max close方法;

第四段**對第三段**優化,為第五段**新增menucommand準備;

第五段**新增另乙個具體命令類。

其實整個都是乙個換湯不換藥的東西,讀者理解了命令模式的架構就好,都可以舉一反三。

設計模式筆記(十四) 組合模式

組合模式 composite 將物件組合成樹形結構以表示 部分 整體 的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。透明方式 也就是說在component中宣告所有用來管理子物件的方法,其中包括add remove等。這樣實現component介面的所有子類都具備了add和re...

設計模式 橋接模式 十四

橋接模式,主要利用 合成 聚合復用原則 比繼承的耦合度會低 1.0 手機 與 軟體 using system namespace bridgedesign 手機軟體 abstract class mobilesoftware 手機遊戲 class mobilegame mobilesoftware ...

設計模式(十四) 模板方法模式

模式中的角色 抽象類 abstractclass 定義了演算法的骨架。具體類 concreteclass 實現抽象類中的抽象方法,已完成完整的演算法。抽象模板類 public abstract class abstractperson 以下是不同子類根據自身特性完成的具體步驟 protected a...