欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一.介紹

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

二.場景約束

設(shè)計一個文本編輯器(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)點

優(yōu)點

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

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

java.lang.Runnable是一個典型的命令模式,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ū)別在哪?

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

    淺析我對 String、StringBuilder、StringBuffer 的理解

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

    JAVA中Object的常用方法

    JAVA中Object是所有對象的頂級父類,存在于java.lang包中,這個包不需要我們手動導(dǎo)包,本文通過實例代碼介紹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的步驟詳解,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • 淺談java中String的兩種賦值方式的區(qū)別

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

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

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

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

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

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

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

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

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

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

最新評論