设计模式学习10 -- 命令模式

本文介绍了一种设计模式——命令模式,该模式允许将请求封装为对象,从而使得请求的发送者和接收者解耦。通过实现一个简单的例子展示了如何利用命令模式来简化客户端与不同模块之间的交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.   命令模式

1.1. 概述

l         将来自客户端的请求传入一个对象,无需了解这个请求激活的动作或有关接受这个请求的处理细节。

l         具体的Command模式代码各式各样,因为如何封装命令,不同系统有不同的做法,下面事例是将命令封装在一个CollectionList中,任何对象一旦加入List中,实际上装入了一个封闭的黑盒中,对象的特征消失了,只有取出时,才有可能模糊的分辨出

l         客户端要调用几个命令,这几个命令来自于不同的模块,这样,客户端必须知道这几个模块的内容,那我们能否将这些命令封装在一起传给客户端,隐藏这些命令的来源信息?

l         方法:将这几个模块用接口管理,对象传入Collection,在客户端通过接口编程。

1.2. 实例演示

import java.util.*;

interface Command{

       public abstract void executeCommand();

}

class Module1 implements Command{

       public void fun1(){

              System.out.println("一些功能");

              }

       /*public void fun2(),.....*/    

       //以下功能在客户端调用"命令1"时调用

       public void executeCommand(){

              System.out.println("显示模块1");

              }

      

       }

class Module2 implements Command{

       public void fun1(){

              System.out.println("一些功能");

              }

       /*public void fun2(),.....*/    

       //以下功能在客户端调用"命令2"时调用

       public void executeCommand(){

              System.out.println("显示模块2");

              }    

       }

 

class CommandConstructor{//不负责生成模块,只负责组织模块和命令(甚至可以用配置文件)

       //将每一个模块和命令名称映射起来

       private static HashMap commandPool = new HashMap();

       public static void constructCommandPool(){

              //以下两句,只是测试使用,实际应用中并不一定在这里new,各个模块引用可能从外界传递过来

              Module1 module1 = new Module1();

              Module2 module2 = new Module2();

              commandPool.put("命令1",module1);

              commandPool.put("命令2",module2);

              }

       public static Command getCommand(String key){

              return (Command)commandPool.get(key);

              }    

       }

 

public class Command1{

    //客户端调用命令时,能否无需关心来源,只需关心调用

       public static void main(String args[]){

              CommandConstructor.constructCommandPool();

              Command c1 = CommandConstructor.getCommand("命令2");

              c1.executeCommand();        

       }

}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值