• [Design Pattern] Command Pattern 简单案例


    Command Pattern, 即命令模式,把一个命令包裹在一个对象里面,将命令对象传递给命令的执行方,属于行为类的设计模式

    下面是命令模式的一个简单案例。

    Stock 代表被操作的对象。Order 定义命令的接口,BuyStock, SellStock 是具体类,实现 Order 接口。Broker 是命令的执行方。CommandPatternDemo 演示命令模式。

    代码实现

    Order, 命令接口

    public interface Order {
    
        public void execute();
    }

    具体的命令类

    public class BuyStock implements Order {
    
        private Stock stock;
        
        public BuyStock(Stock stock){
            this.stock = stock;
        }
        
        @Override
        public void execute() {
            stock.buy();
        }
    }
    public class SellStock implements Order {
    
        private Stock stock;
        
        public SellStock(Stock stock){
            this.stock = stock;
        }
        
        @Override
        public void execute() {
            stock.sell();
        }
    }

    Broker, 命令的执行者

    import java.util.LinkedList;
    import java.util.List;
    
    public class Broker {
        
        private List<Order> orders = new LinkedList<>();
        
        public void takeOrder(Order order){
            orders.add(order);
        }
        
        public void placeOrders(){
            for (Order order : orders){
                order.execute();
            }
        }
    }

    演示命令模式

    public class CommandPatternDemo {
    
        public static void main(){
            Stock stock = new Stock("apple", 19);
            
            Order buyStock = new BuyStock(stock);
            Order sellStock = new SellStock(stock);
                    
            Broker broker = new Broker();
            broker.takeOrder(buyStock);
            broker.takeOrder(sellStock);
            
            broker.placeOrders();
        }
    }

    考虑扩展性

    需要新增一个命令操作时,如 FreezeStock:

    1. 新增一个文件,实现 FreezeStock 类,使其实现 Order 接口。

    2. 在 Stock 中添加 freeze 方法

    3. 在客户端中调用新增的 FreezeStock 对象,类实现命令。

    即可实现新增操作的效果,无需修改命令执行方 Broker 的代码。

    参考资料

    Design Patterns - Command Pattern, TutorialsPoint

  • 相关阅读:
    守护进程、互斥锁、生产者消费者模型
    实现并发编程的基础理论
    udp协议
    进程与进程池
    tcp协议产生-粘包问题的解决方案
    day21面向对象_类
    day16_面向过程编程与模块导入
    day15_函数递归_匿名函数_内置函数
    三、运算符(阶段二)
    二、(续)基础语法--常量、变量和注释(阶段二)
  • 原文地址:https://www.cnblogs.com/TonyYPZhang/p/5515641.html
Copyright © 2020-2023  润新知