设计模式:命令模式(command)

博客展示了命令模式的代码实现。定义了命令接口及多个具体命令实现类,如买、卖、批量买操作。还有接收者类负责具体操作,以及命令执行者类来管理和执行命令。通过客户端代码演示了如何使用这些类完成相应操作。


/**
 * @Author : haojiangt
 * @Description :命令接口
 **/
public interface Command {
    void exeCute();
}

/**
 * @Author : haojiangt
 * @Description :具体的命令实现类,实现了买的操作
 **/
public class BuyCommand implements Command{
    private Stock stock;

    public BuyCommand(Stock stock) {
        this.stock = stock;
    }

    @Override
    public void exeCute() {
        stock.buy();
    }
}

/**
 * @Author : haojiangt
 * @Description :具体的命令实现类,实现了卖的操作
 **/
public class SellCommand implements Command{
    private Stock stock;

    public SellCommand(Stock stock) {
        this.stock = stock;
    }

    @Override
    public void exeCute() {
        stock.sell();
    }
}

/**
 * @Author : haojiangt
 * @Description :具体的命令实现类,实现了批量买的操作
 **/
public class MutiBuyCommand implements Command{
    private Stock[] stockList;

    public MutiBuyCommand(Stock[] stockList) {
        this.stockList = stockList;
    }

    @Override
    public void exeCute() {
        for (Stock stock : stockList) {
            stock.buy();
        }
    }
}

/**
 * @Author : haojiangt
 * @Description :接收者,命令具体的实现者
 **/
public class Stock {
    private String name = "ABC";
    private int quantity = 10;

    public void buy(){
        System.out.println(this.toString() + ",bought");
    }
    public void sell(){
        System.out.println(this.toString() + ",sold");
    }

    @Override
    public String toString() {
        return "Stock{" + "name='" + name + ", quantity=" + quantity + '}';
    }
}

package pattern.Command;

import java.util.ArrayList;
import java.util.List;
/**
  * Command 将某一种或者某一组行为请求者和请为具体实现者解耦
  *      通过调用者 调用接受者 执行命令
  **/
/**
 * @Author : haojiangtao
 * @Description :命令的执行者(请求调用哪些命令)
 **/
public class Broker {
    private List<Command> commandList = new ArrayList<Command>();

    public void addCommand(Command command){
        commandList.add(command);
    }

    public  void exeCommands(){
        for (Command command : commandList) {
            command.exeCute();
        }
        commandList.clear();
    }
    
    //客户端
    public static void main(String[] args){
        //创建一个接收者
        Stock stock = new Stock();
        //初始化具体命令
        Command buyCommand = new BuyCommand(stock);
        Command sellCommand = new SellCommand(stock);
        //初始化执行者
        Broker broker = new Broker();
        //将命令添加到执行者
        broker.addCommand(buyCommand);
        broker.addCommand(sellCommand);
        //执行
        broker.exeCommands();

        Stock[] stocks = new Stock[10];
        for(int i = 0; i < 10; i++){
            stocks[i] = new Stock();
        }
        //初始化具体命令
        Command mutiBuyCommand = new MutiBuyCommand(stocks);
        //初始化执行者
        Broker mutiBroker = new Broker();
        //将命令添加到执行者
        mutiBroker.addCommand(mutiBuyCommand);
        //执行
        mutiBroker.exeCommands();
    }
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值