欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Java描述設(shè)計模式(20):命令模式

本文源碼:GitHub·點這里 || GitEE·點這里

從策劃到設(shè)計制作,每一步都追求做到細(xì)膩,制作可持續(xù)發(fā)展的企業(yè)網(wǎng)站。為客戶提供成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)頁設(shè)計、域名與空間、網(wǎng)頁空間、網(wǎng)絡(luò)營銷、VI設(shè)計、 網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,以客戶的口碑塑造優(yōu)易品牌,攜手廣大客戶,共同發(fā)展進(jìn)步。

一、生活場景

1、場景描述

智能電腦的品牌越來越多,由此誕生了一款電腦控制的APP,萬能遙控器,用戶在使用遙控器的時候,可以切換為自家電視的品牌,然后對電視進(jìn)行控制。

2、代碼實現(xiàn)

public class C01_InScene {
    public static void main(String[] args) {
        TVClient tvClient = new TVClient() ;
        Remote remote = new RemoteApp(tvClient) ;
        UserClient userClient = new UserClient(remote) ;
        userClient.action("HM","換臺");
    }
}
/**
 * 遙控接口
 */
interface Remote {
    void controlTV (String tvType,String task);
}
/**
 * 遙控器APP
 */
class RemoteApp implements Remote {
    private TVClient tvClient = null ;
    public RemoteApp (TVClient tvClient){
        this.tvClient = tvClient ;
    }
    @Override
    public void controlTV(String tvType, String task) {
        tvClient.action(tvType,task);
    }
}
/**
 * 用戶端
 */
class UserClient {
    // 持有遙控器
    private Remote remote = null ;
    public UserClient (Remote remote){
        this.remote = remote ;
    }
    public void action (String tvType, String task){
        remote.controlTV(tvType,task);
    }
}
/**
 * 電視端
 */
class TVClient {
    public void action (String tvType, String task){
        System.out.println("TV品牌:"+tvType+";執(zhí)行:"+task);
    }
}

二、命令模式

1、基礎(chǔ)概念

命令模式屬于對象的行為模式。命令模式把一個請求或者操作封裝到一個對象中。把發(fā)出命令的動作和執(zhí)行命令的動作分割開,委派給不同的對象。命令模式允許請求的一方和接收的一方獨(dú)立開來,使得請求的一方不必知道接收請求的一方的接口,更不必知道請求是怎么被接收,以及操作是否被執(zhí)行。

2、模式圖解

Java描述設(shè)計模式(20):命令模式

3、核心角色

  • 命令角色

聲明所有具體命令類的抽象接口。

  • 具體命令角色

定義接收者和行為之間的交互方式:實現(xiàn)execute()方法,調(diào)用接收者的相應(yīng)操作 , 傳遞命令信息。

  • 請求者角色

負(fù)責(zé)調(diào)用命令對象執(zhí)行請求,相關(guān)的方法叫做行動方法。

  • 接收者角色

執(zhí)行請求。任何一個類都可以成為接收者,執(zhí)行請求的方法叫做行動方法。

4、源碼實現(xiàn)

public class C02_Command {
    public static void main(String[] args) {
        Receiver receiver = new Receiver();
        Command command = new ConcreteCommand(receiver);
        Invoker invoker = new Invoker(command);
        invoker.action("臥倒");
    }
}
/**
 * 命令角色
 */
interface Command {
    // 執(zhí)行方法
    void execute(String task);
}
/**
 * 具體命令角色類
 */
class ConcreteCommand implements Command {
    //持有相應(yīng)的接收者對象
    private Receiver receiver = null;
    public ConcreteCommand(Receiver receiver){
        this.receiver = receiver;
    }
    @Override
    public void execute(String task) {
        //接收方來真正執(zhí)行請求
        receiver.action(task);
    }
}
/**
 * 請求者角色類
 */
class Invoker {
    // 持有命令對象
    private Command command = null;
    public Invoker(Command command){
        this.command = command;
    }
    // 行動方法
    public void action(String task){
        command.execute(task);
    }
}
/**
 * 接收者角色類
 */
class Receiver {
    // 執(zhí)行命令操作
    public void action(String task){
        System.out.println("執(zhí)行命令:"+task);
    }
}

三、Spring框架應(yīng)用

Spring框架中封裝的JdbcTemplate類API使用到了命令模式。

1、JdbcOperations接口

public interface JdbcOperations {
    @Nullable
    <T> T execute(StatementCallback<T> var1) ;
}

2、JdbcTemplate類

這里只保留模式方法的代碼。

public class JdbcTemplate implements JdbcOperations {
    @Nullable
    public <T> T execute(StatementCallback<T> action) {
        try {
            T result = action.doInStatement(stmt);
        } catch (SQLException var9) {
        } finally {
        }
    }
}

3、StatementCallback接口

@FunctionalInterface
public interface StatementCallback<T> {
    @Nullable
    T doInStatement(Statement var1) ;
}

四、命令模式總結(jié)

  • 松散的耦合

命令模式使得命令發(fā)起者和命令執(zhí)行者解耦,發(fā)起命令的對象完全不知道具體實現(xiàn)對象是誰。這和常見的MQ消息隊列原理是類似的。

  • 動態(tài)的控制

命令模式把請求封裝起來,可以動態(tài)地對它進(jìn)行參數(shù)化、隊列化和等操作和管理,使系統(tǒng)更加的靈活。

  • 良好的擴(kuò)展性

命令發(fā)起者和命令執(zhí)行者實現(xiàn)完全解耦,因此擴(kuò)展添加新命令很容易。

五、源代碼地址

GitHub·地址
https://github.com/cicadasmile/model-arithmetic-parent
GitEE·地址
https://gitee.com/cicadasmile/model-arithmetic-parent

Java描述設(shè)計模式(20):命令模式

分享題目:Java描述設(shè)計模式(20):命令模式
分享網(wǎng)址:http://chinadenli.net/article28/gieojp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)網(wǎng)頁設(shè)計公司做網(wǎng)站建站公司搜索引擎優(yōu)化網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化