亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

一.介紹

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

二.場景約束

設(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring攔截器和過濾器的區(qū)別在哪?

    Spring攔截器和過濾器的區(qū)別在哪?

    相信很多小伙伴都對(duì)Spring攔截器和過濾器的區(qū)別有疑惑,今天特地整理了本篇文章,文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06
  • 淺析我對(duì) String、StringBuilder、StringBuffer 的理解

    淺析我對(duì) String、StringBuilder、StringBuffer 的理解

    StringBuilder、StringBuffer 和 String 一樣,都是用于存儲(chǔ)字符串的。這篇文章談?wù)勑【帉?duì)String、StringBuilder、StringBuffer 的理解,感興趣的朋友跟隨小編一起看看吧
    2020-05-05
  • JAVA中Object的常用方法

    JAVA中Object的常用方法

    JAVA中Object是所有對(duì)象的頂級(jí)父類,存在于java.lang包中,這個(gè)包不需要我們手動(dòng)導(dǎo)包,本文通過實(shí)例代碼介紹JAVA中Object的常用方法,感興趣的朋友一起看看吧
    2023-11-11
  • Jmeter3.0發(fā)布!版本更新到底更新了什么

    Jmeter3.0發(fā)布!版本更新到底更新了什么

    Jmeter3.0發(fā)布!版本更新到底更新了什么?這篇文章主要告訴大家Jmeter3.0版本更新了什么,感興趣的小伙伴們可以參考一下
    2016-08-08
  • eclipse安裝spring ide的步驟詳解

    eclipse安裝spring ide的步驟詳解

    這篇文章主要介紹了eclipse安裝spring ide的步驟詳解,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 淺談java中String的兩種賦值方式的區(qū)別

    淺談java中String的兩種賦值方式的區(qū)別

    這篇文章主要介紹了淺談java中String的兩種賦值方式的區(qū)別。簡單介紹了兩種賦值方式,然后進(jìn)行了實(shí)例分析,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • java去除數(shù)組重復(fù)元素的四種方法

    java去除數(shù)組重復(fù)元素的四種方法

    本文給大家分享四種java去除數(shù)組重復(fù)元素的方法,每種方法通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-11-11
  • Java虛擬機(jī)JVM性能優(yōu)化(一):JVM知識(shí)總結(jié)

    Java虛擬機(jī)JVM性能優(yōu)化(一):JVM知識(shí)總結(jié)

    這篇文章主要介紹了Java虛擬機(jī)JVM性能優(yōu)化(一):JVM知識(shí)總結(jié),本文是系列文章的第一篇,后續(xù)篇章請繼續(xù)關(guān)注腳本之家,需要的朋友可以參考下
    2014-09-09
  • SpringBoot默認(rèn)使用HikariDataSource數(shù)據(jù)源方式

    SpringBoot默認(rèn)使用HikariDataSource數(shù)據(jù)源方式

    這篇文章主要介紹了SpringBoot默認(rèn)使用HikariDataSource數(shù)據(jù)源方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • SpringMVC利用dropzone組件實(shí)現(xiàn)圖片上傳

    SpringMVC利用dropzone組件實(shí)現(xiàn)圖片上傳

    這篇文章主要介紹了SpringMVC利用dropzone組件實(shí)現(xiàn)圖片上傳,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02

最新評(píng)論