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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

JAVA中的命令模式实例教程

發(fā)布時(shí)間:2025/3/8 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA中的命令模式实例教程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文鏈接??作者:Pankaj Kumar?譯者:f0tlo <1357654289@qq.com>

命令模式是一種行為模式,因此,它處理的是對(duì)象的行為。命令模式為系統(tǒng)中不同的對(duì)象提供中性化的交流媒介。根據(jù)GoF的定義,命令模式是:


通過(guò)封裝一組完全不相關(guān)的對(duì)象相互之間的的交互及通訊來(lái)完成松耦合。 允許某一個(gè)對(duì)象的行為的變化是獨(dú)立于其他對(duì)象的。

在企業(yè)級(jí)應(yīng)用中,命令模式是非常有用的,它使得多個(gè)對(duì)象可以相互交流。如果一些對(duì)象與另一些對(duì)象直接交流,系統(tǒng)組件之間是緊耦合的方式。這種方式導(dǎo)致系統(tǒng)具有更高的可維護(hù)性,可擴(kuò)展的靈活性變得很低。命令模式專注于提供一個(gè)調(diào)解人介于需要交流的對(duì)象之間來(lái)幫助完成對(duì)象間的松耦合。

飛機(jī)流量控制器就是使用命令模式最好的例子。空管中心就是和這個(gè)負(fù)責(zé)不同飛機(jī)之間交流的調(diào)解人。調(diào)解人猶如一個(gè)不同對(duì)象之間的路由器,它有自己邏輯來(lái)提供對(duì)象之間如何交流。

在本文的例子中,我們?cè)囍瓿梢粋€(gè)聊天程序,允許群聊。用戶使用自己的名字來(lái)識(shí)別,他們可以發(fā)送接收消息。任何人發(fā)送的消息都能被群組中的其他用戶接收到。

調(diào)解人接口

首先創(chuàng)建調(diào)解人接口,用于如何定義具體的調(diào)解人。


package com.journaldev.design.mediator;public interface ChatMediator {public void sendMessage(String msg, User user);void addUser(User user); }

?

組群用戶接口

用戶可以發(fā)送接送信息,因此應(yīng)該有用戶接口或者抽象類。此處創(chuàng)建用戶抽象類如下:


package com.journaldev.design.mediator;public abstract class User {protected ChatMediator mediator;protected String name;public User(ChatMediator med, String name){this.mediator=med;this.name=name;}public abstract void send(String msg);public abstract void receive(String msg); }

注意用戶有一個(gè)對(duì)調(diào)解人的索引,因?yàn)椴煌挠脩粜枰涣鳌?/p>

調(diào)解人實(shí)體類

現(xiàn)在調(diào)解人的實(shí)體類,它包含了再組群中的一些類用戶并且提供用戶之間如何交流的邏輯。


package com.journaldev.design.mediator;import java.util.ArrayList; import java.util.List;public class ChatMediatorImpl implements ChatMediator {private List<User> users;public ChatMediatorImpl(){this.users=new ArrayList<>();}@Overridepublic void addUser(User user){this.users.add(user);}@Overridepublic void sendMessage(String msg, User user) {for(User u : this.users){//message should not be received by the user sending itif(u != user){u.receive(msg);}}}}

組群用戶的實(shí)體類

現(xiàn)在創(chuàng)建用戶的實(shí)體類用于客戶端中


package com.journaldev.design.mediator;public class UserImpl extends User {public UserImpl(ChatMediator med, String name) {super(med, name);}@Overridepublic void send(String msg){System.out.println(this.name+": Sending Message="+msg);mediator.sendMessage(msg, this);}@Overridepublic void receive(String msg) {System.out.println(this.name+": Received Message:"+msg);}}

注意,send()方法正在調(diào)解人中被用于傳遞信息給其他用戶。但是它不知道如何被此調(diào)解人使用。

命令模式客戶端

現(xiàn)在完成一個(gè)簡(jiǎn)單的聊天程序來(lái)完成組群聊天。


package com.journaldev.design.mediator;public class ChatClient {public static void main(String[] args) {ChatMediator mediator = new ChatMediatorImpl();User user1 = new UserImpl(mediator, "Pankaj");User user2 = new UserImpl(mediator, "Lisa");User user3 = new UserImpl(mediator, "Saurabh");User user4 = new UserImpl(mediator, "David");mediator.addUser(user1);mediator.addUser(user2);mediator.addUser(user3);mediator.addUser(user4);user1.send("Hi All");}}

注意,此客戶端程序非常簡(jiǎn)單,完全沒(méi)有給出細(xì)節(jié)描述信息是如何被處理以及調(diào)解人是否將會(huì)使用用戶對(duì)象。

上述程序的輸出如下:


Pankaj: Sending Message=Hi All Lisa: Received Message:Hi All Saurabh: Received Message:Hi All David: Received Message:Hi All

命令模式的UML圖

JDK中的命令模式

  • java.util.Timer類中scheduleXXX()方法
  • java Concurrency Executor?execute() 方法
  • java.lang.reflect.Method invoke()方法

特別注意的地方

  • 命令模式中,當(dāng)不同的對(duì)象的通訊邏輯很復(fù)雜是,我們可以使用中心化的交流方式來(lái)處理此通訊邏輯。
  • Java Message Service(JMS)消息服務(wù)與觀察者模式一起來(lái)完成消息在不同程序間的訂閱與發(fā)布。
  • 命令模式僅僅是為了松耦合。如果調(diào)解人的數(shù)量變大,此時(shí)易維護(hù)性就變差了。

總結(jié)

以上是生活随笔為你收集整理的JAVA中的命令模式实例教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。