日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

《设计模式入门》 19.命令模式

發布時間:2024/1/8 asp.net 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《设计模式入门》 19.命令模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

命令模式就是將一個請求封裝為一個對象,使發出請求的責任和執行請求的責任分割開。這樣兩者之間通過命令對象進行溝通,這樣方便將命令對象進行儲存、傳遞、調用、增加與管理。

一般命令模式由四類組成:

  • 抽象命令類(Command)角色:聲明執行命令的接口,擁有執行命令的抽象方法 execute()。
  • 具體命令角色(Concrete Command)角色:是抽象命令類的具體實現類,它擁有接收者對象,并通過調用接收者的功能來完成命令要執行的操作。
  • 實現者/接收者(Receiver)角色:執行命令功能的相關操作,是具體命令對象業務的真正實現者。
  • 調用者/請求者(Invoker)角色:是請求的發送者,它通常擁有很多的命令對象,并通過訪問命令對象來執行相關請求,它不直接訪問接收者。
  • 簡單的可以理解為下訂單,比如我在茶百道點了一杯楊枝甘露,在一點點點了一杯椰果奶茶,又在書亦燒仙草點了一杯燒仙草,如果我一個個的去買就會很麻煩,但是如果我在美團下單,他們制作好了,讓跑腿小哥取回來,就會方便很多了,也把我們和幾個店鋪進行了解耦,并且再下單之前,還可以很方便的取消訂單。

    =========================================================================

    那么我們來實現一下上面的例子:

    首先我們定義抽象命令類角色:也就是奶茶店的角色,奶茶店負責實現做奶茶的方法:

    package BehavioralPatterns.CommandPattern;/*** @author Zeyu Wan* @version 1.0.0* @ClassName TeaShop.java* @Description 奶茶店接口* @createTime 2022年03月16日 14:46:00*/ public interface TeaShop {/*** 做奶茶*/public void makeTea(); }

    然后我們定義三個具體的奶茶店,來實現奶茶店的接口,店鋪可以接受訂單做奶茶:

    茶百道:

    package BehavioralPatterns.CommandPattern.shop;import BehavioralPatterns.CommandPattern.Drink; import BehavioralPatterns.CommandPattern.TeaShop;/*** @author Zeyu Wan* @version 1.0.0* @ClassName ChaBaiDao.java* @Description 茶百道類* @createTime 2022年03月16日 14:56:00*/ public class ChaBaiDao implements TeaShop {private Drink drink;public ChaBaiDao(Drink drink){this.drink = drink;}@Overridepublic void makeTea() {drink.drink();} }

    書亦:

    package BehavioralPatterns.CommandPattern.shop;import BehavioralPatterns.CommandPattern.Drink; import BehavioralPatterns.CommandPattern.TeaShop;/*** @author Zeyu Wan* @version 1.0.0* @ClassName ShuYi.java* @Description 書亦燒仙草類* @createTime 2022年03月16日 14:54:00*/ public class ShuYi implements TeaShop {private Drink drink;public ShuYi(Drink drink){this.drink = drink;}@Overridepublic void makeTea() {drink.drink();} }

    一點點:

    package BehavioralPatterns.CommandPattern.shop;import BehavioralPatterns.CommandPattern.Drink; import BehavioralPatterns.CommandPattern.TeaShop;/*** @author Zeyu Wan* @version 1.0.0* @ClassName YiDianDian.java* @Description 一點點類* @createTime 2022年03月16日 14:57:00*/ public class YiDianDian implements TeaShop {private Drink drink;public YiDianDian(Drink drink){this.drink = drink;}@Overridepublic void makeTea() {drink.drink();} }

    然后定義一個飲料接口,來真實的實現具體的飲料制作:

    package BehavioralPatterns.CommandPattern;/*** @author Zeyu Wan* @version 1.0.0* @ClassName Drink.java* @Description 飲料接口* @createTime 2022年03月16日 14:49:00*/ public interface Drink {/*** 實現飲料制作*/public void drink(); }

    具體的奶茶制作:

    椰果奶茶:

    package BehavioralPatterns.CommandPattern.drink;import BehavioralPatterns.CommandPattern.Drink;/*** @author Zeyu Wan* @version 1.0.0* @ClassName CoconutMilkTea.java* @Description 椰果奶茶類* @createTime 2022年03月16日 14:52:00*/ public class CoconutMilkTea implements Drink {@Overridepublic void drink() {System.out.println("椰果奶茶做好了");} }

    燒仙草:

    package BehavioralPatterns.CommandPattern.drink;import BehavioralPatterns.CommandPattern.Drink;/*** @author Zeyu Wan* @version 1.0.0* @ClassName HerbalJelly.java* @Description 燒仙草類* @createTime 2022年03月16日 14:53:00*/ public class HerbalJelly implements Drink {@Overridepublic void drink() {System.out.println("燒仙草做好了");} }

    楊枝甘露:

    package BehavioralPatterns.CommandPattern.drink;import BehavioralPatterns.CommandPattern.Drink;/*** @author Zeyu Wan* @version 1.0.0* @ClassName YojiNectar.java* @Description 楊枝甘露類* @createTime 2022年03月16日 14:51:00*/ public class YojiNectar implements Drink {@Overridepublic void drink() {System.out.println("楊枝甘露做好了");} }

    之后創建一個美團訂單中心,實現總的訂單添加刪除以及下單功能,負責與奶茶店交互,避免了下訂單的人喝奶茶店交互。

    package BehavioralPatterns.CommandPattern;import java.util.ArrayList; import java.util.List;/*** @author Zeyu Wan* @version 1.0.0* @ClassName OrderCenter.java* @Description 訂單中心* @createTime 2022年03月16日 14:58:00*/ public class OrderCenter {private List<TeaShop> orderList = new ArrayList<>();/*** 添加訂單* @param teaShop 奶茶店訂單* @return 是否添加成功*/public boolean addOrder(TeaShop teaShop){return orderList.add(teaShop);}/*** * @param teaShop 奶茶店訂單* @return 是否刪除成功*/public boolean removeOrder(TeaShop teaShop){return orderList.remove(teaShop);}/*** 下單*/public synchronized void placeOrder(){for (TeaShop teashop:orderList) {teashop.makeTea();}orderList.clear();} }

    測試一下:

    package BehavioralPatterns.CommandPattern;import BehavioralPatterns.CommandPattern.drink.CoconutMilkTea; import BehavioralPatterns.CommandPattern.drink.HerbalJelly; import BehavioralPatterns.CommandPattern.drink.YojiNectar; import BehavioralPatterns.CommandPattern.shop.ChaBaiDao; import BehavioralPatterns.CommandPattern.shop.ShuYi; import BehavioralPatterns.CommandPattern.shop.YiDianDian;/*** @author Zeyu Wan* @version 1.0.0* @ClassName CommonTest.java* @Description 測試類* @createTime 2022年03月16日 15:02:00*/ public class CommonTest {public static void main(String[] args) {//茶百道點楊枝甘露ChaBaiDao chaBaiDaoOrder = new ChaBaiDao(new YojiNectar());//書亦燒仙草點燒仙草ShuYi shuYiOrder = new ShuYi(new HerbalJelly());//一點點點椰果奶茶YiDianDian yiDianDianOrder = new YiDianDian(new CoconutMilkTea());//創建訂單并添加商品OrderCenter userOrder = new OrderCenter();if (userOrder.addOrder(chaBaiDaoOrder)){System.out.println("商品添加成功");}if (userOrder.addOrder(shuYiOrder)){System.out.println("商品添加成功");}if (userOrder.addOrder(yiDianDianOrder)){System.out.println("商品添加成功");}//不想要一點點的訂單了if (userOrder.removeOrder(yiDianDianOrder)){System.out.println("商品刪除成功");}//下訂單userOrder.placeOrder();} }

    ?

    優點:

  • 降低系統的耦合度:命令模式將調用操作的對象與知道如何實現該操作的對象解耦。
  • 命令是頭等的對象。它們可像其他的對象一樣被操縱和擴展。
  • 組合命令:你可將多個命令裝配成一個組合命令,即可以比較容易地設計一個命令隊列和宏命令。一般說來,組合命令是組合模式的一個實例。
  • 增加新的命令很容易,因為這無需改變已有的類。
  • 可以方便地實現對請求的Undo和Redo。
  • 缺點:

    • 使用命令模式可能會 導致某些系統有過多的具體命令類。因為針對每一個命令都需要設計一個具體命令類,因此某些系統可能需要大量具體命令類,這將影響命令模式的使用。

    總結

    以上是生活随笔為你收集整理的《设计模式入门》 19.命令模式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。