最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java行為型模式中命令模式分析

 更新時(shí)間:2023年02月17日 08:29:31   作者:非凡的小笨魚  
在軟件設(shè)計(jì)中,我們經(jīng)常需要向某些對(duì)象發(fā)送請(qǐng)求,但是并不知道請(qǐng)求的接收者是誰,也不知道被請(qǐng)求的操作是哪個(gè),我們只需在程序運(yùn)行時(shí)指定具體的請(qǐng)求接收者即可,此時(shí)可以使用命令模式來進(jìn)行設(shè)計(jì)

一.介紹

命令模式(Command Pattern)屬于行為型模式。請(qǐng)求以命令的形式包裹在對(duì)象中,并傳給調(diào)用對(duì)象。調(diào)用對(duì)象尋找可以處理該命令的合適的對(duì)象,并把該命令傳給相應(yīng)的對(duì)象,該對(duì)象執(zhí)行命令,執(zhí)行順序是調(diào)用者→命令→接收者,實(shí)現(xiàn)調(diào)用者(Invoker)與接收者(Receiver)解耦

二.場(chǎng)景約束

設(shè)計(jì)一個(gè)文本編輯器(TextField),支持復(fù)制、插入以及撤銷操作

三.UML類圖

四.示意代碼

業(yè)務(wù)代碼

//抽象命令
public interface Command {
    void execute();
    void undo();
}
//調(diào)用者
class Invoker{
    private Command command;
    public Invoker(Command command) {
        this.command = command;
    }
    public void setCommand(Command command) {
        this.command = command;
    }
    public void call(){
        command.execute();
        command.undo();
    }
}
//具體命令
class insertCommand implements Command {
    private TextField textField;
    private String insertStr = "insertStr";
    public insertCommand(TextField textField) {
        this.textField = textField;
    }
    @Override
    public void execute() {
        textField.text += insertStr;
        System.out.println(textField.text);
    }
    @Override
    public void undo() {
        textField.text = textField.text.substring(0, textField.text.length() - insertStr.length());
        System.out.println(textField.text);
    }
}
//具體命令
class CopyCommand implements Command {
    private TextField textField;
    public CopyCommand(TextField textField) {
        this.textField = textField;
    }
    @Override
    public void execute() {
        textField.text += textField.text;
        System.out.println(textField.text);
    }
    @Override
    public void undo() {
        textField.text = textField.text.substring(0, textField.text.length() / 2);
        System.out.println(textField.text);
    }
}
//接收者
class TextField {
    public String text = "text";
}

客戶端

public class Client {
    public static void main(String[] args) {
        Invoker invoker = new Invoker(new CopyCommand(new TextField()));
        invoker.call();
    }
}

五.優(yōu)點(diǎn)

優(yōu)點(diǎn)

  • 新增、刪除命令非常方便
  • 符合開閉原則
  • 命令可以組合,同時(shí)支持命令的撤銷和恢復(fù)
  • 命令可以增加統(tǒng)一功能:日志、權(quán)限
  • 調(diào)用者與接收者解耦

六.在JDK中的應(yīng)用

java.lang.Runnable是一個(gè)典型的命令模式,Runnable充當(dāng)抽象命令的角色,Thread充當(dāng)調(diào)用者的角色,而接收者的角色是開發(fā)者自己定義的

//具體命令
class ConcreteCommand implements Runnable{
    private Receiver receiver;
    public ConcreteCommand(Receiver receiver) {
        this.receiver = receiver;
    }
    @Override
    public void run() {
        receiver.execute();
    }
}
//接收者
class Receiver{
    public void execute(){
        System.out.println("執(zhí)行邏輯");
    }
}

到此這篇關(guān)于Java行為型模式中命令模式分析的文章就介紹到這了,更多相關(guān)Java命令模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java面試突擊之sleep和wait有什么區(qū)別詳析

    java面試突擊之sleep和wait有什么區(qū)別詳析

    按理來說sleep和wait本身就是八竿子打不著的兩個(gè)東西,但是在實(shí)際使用中大家都喜歡拿他們來做比較,或許是因?yàn)樗鼈兌伎梢宰尵€程處于阻塞狀態(tài),這篇文章主要給大家介紹了關(guān)于java面試突擊之sleep和wait有什么區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • Java基礎(chǔ)之枚舉Enum類案例詳解

    Java基礎(chǔ)之枚舉Enum類案例詳解

    這篇文章主要介紹了Java基礎(chǔ)之枚舉Enum類案例詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • 如何解決Idea沒有elementui標(biāo)簽的代碼提示問題

    如何解決Idea沒有elementui標(biāo)簽的代碼提示問題

    這篇文章主要介紹了如何解決Idea沒有elementui標(biāo)簽的代碼提示問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Java命令行參數(shù)解析工具jcommander詳解

    Java命令行參數(shù)解析工具jcommander詳解

    這篇文章主要為大家介紹了Java命令行參數(shù)解析工具jcommander命令詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Java Arrays.sort和Collections.sort排序?qū)崿F(xiàn)原理解析

    Java Arrays.sort和Collections.sort排序?qū)崿F(xiàn)原理解析

    這篇文章主要介紹了Java Arrays.sort和Collections.sort排序?qū)崿F(xiàn)原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Java設(shè)計(jì)模式之單例模式Singleton Pattern詳解

    Java設(shè)計(jì)模式之單例模式Singleton Pattern詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式之單例模式Singleton Pattern詳解,一些常用的工具類、線程池、緩存,數(shù)據(jù)庫,數(shù)據(jù)庫連接池、賬戶登錄系統(tǒng)、配置文件等程序中可能只允許我們創(chuàng)建一個(gè)對(duì)象,這就需要單例模式,需要的朋友可以參考下
    2023-12-12
  • Mybatis 如何批量刪除數(shù)據(jù)的實(shí)現(xiàn)示例

    Mybatis 如何批量刪除數(shù)據(jù)的實(shí)現(xiàn)示例

    這篇文章主要介紹了Mybatis 如何批量刪除數(shù)據(jù)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • java與JSON數(shù)據(jù)的轉(zhuǎn)換實(shí)例詳解

    java與JSON數(shù)據(jù)的轉(zhuǎn)換實(shí)例詳解

    這篇文章主要介紹了java與JSON數(shù)據(jù)的轉(zhuǎn)換實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Java8學(xué)習(xí)教程之lambda表達(dá)式語法介紹

    Java8學(xué)習(xí)教程之lambda表達(dá)式語法介紹

    眾所周知lambda表達(dá)式是JAVA8中提供的一種新的特性,它支持Java也能進(jìn)行簡(jiǎn)單的“函數(shù)式編程”。 下面這篇文章主要給大家介紹了關(guān)于Java8學(xué)習(xí)教程之lambda表達(dá)式語法的相關(guān)資料,需要的朋友可以參考下。
    2017-09-09
  • Java方法調(diào)用解析靜態(tài)分派動(dòng)態(tài)分派執(zhí)行過程

    Java方法調(diào)用解析靜態(tài)分派動(dòng)態(tài)分派執(zhí)行過程

    這篇文章主要為大家介紹了Java方法調(diào)用解析靜態(tài)分派動(dòng)態(tài)分派執(zhí)行過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06

最新評(píng)論

恩平市| 浮山县| 茂名市| 定安县| 浮山县| 永仁县| 新邵县| 岚皋县| 靖远县| 海丰县| 中西区| 宿松县| 武鸣县| 兴山县| 泸州市| 周宁县| 乐至县| 孝昌县| 柘城县| 竹溪县| 临汾市| 攀枝花市| 家居| 丽江市| 华容县| 富川| 永德县| 沙河市| 惠东县| 巨鹿县| 廉江市| 泉州市| 石楼县| 武汉市| 西乡县| 社会| 望奎县| 浪卡子县| 防城港市| 盐山县| 龙川县|