命令模式lua实现
来源:互联网 发布:solidworks软件画足球 编辑:程序博客网 时间:2024/05/21 14:06
--[[优点:1.降低对象之间的耦合度。2.新的命令可以很容易地加入到系统中。3.可以比较容易地设计一个组合命令。4.调用同一方法实现不同的功能。缺点:使用命令模式可能会导致某些系统有过多的具体命令类。因为针对每一个命令都需要设计一个具体命令类,因此某些系统可能需要大量具体命令类,这将影响命令模式的使用。Command类:是一个抽象类,类中对需要执行的命令进行声明,一般来说要对外公布一个execute方法用来执行命令。ConcreteCommand类:Command类的实现类,对抽象类中声明的方法进行实现。Invoker类:调用者,负责调用命令。Receiver类:接收者,负责接收命令并且执行命令。]]--Command = {}function Command:new(r,o)o = o or {}setmetatable(o,self)self.__index = selfo.receiver = rreturn o;endConcreteCommand1 = Command:new()function ConcreteCommand1:Execute()self.receiver:Action1()endConcreteCommand2 = Command:new()function ConcreteCommand2:Execute()self.receiver:Action2()endReceiver = {}function Receiver:new(o)o = o or {}setmetatable(o,self)self.__index = selfreturn o;endfunction Receiver:Action1()print("来一条清蒸鱼")endfunction Receiver:Action2()print("来一个蛋糕")endInvoker = {}function Invoker:new(o)o = o or {}setmetatable(o,self)self.__index = selfo.allcommand = {}return o;endfunction Invoker:SetCommand(c)table.insert(self.allcommand,c)endfunction Invoker:ExecuteCommand()for _,v in pairs(self.allcommand) dov:Execute()endend--厨师 是 Receiverchef = Receiver:new()--下面是两个菜(命令),执行者是Receiver(chef)fish = ConcreteCommand1:new(chef)cake = ConcreteCommand2:new(chef)--调用者 是服务员waiter = Invoker:new()--服务员下达了两个菜(命令),执行者当然是Receiver(chef)waiter:SetCommand(fish)waiter:SetCommand(cake)--看似服务员做了两个菜,实际是Receiver做,从而做了解耦;客人与厨师不用相互紧耦合waiter:ExecuteCommand()输出结果:
来一条清蒸鱼
来一个蛋糕
- 命令模式lua实现
- LUA实现状态模式
- 策略模式lua实现
- 装饰模式lua实现
- 代理模式lua实现
- 原型模式lua实现
- 外观模式lua实现
- 观察者模式lua实现
- 状态模式lua实现
- 适配器模式lua实现
- 迭代器模式lua实现
- 备忘录模式lua实现
- 组合模式lua实现
- 访问者模式lua实现
- 装饰模式--lua实现
- 观察者模式--lua实现
- 【Lua】观察者模式在Lua中的实现
- 简单工厂模式lua实现
- C++ 内联函数
- MySQL:索引工作原理
- Android异步加载解决方案
- ocp 10g考试环境模拟器
- ProductModel.class.php
- 命令模式lua实现
- poj1273
- Hadoop2.2.0版本多节点集群安装及测试
- ARM架构kprobe应用及实现分析(9.0 arch_prepare_kprobe平台相关注册)
- Product_catModel.class.php
- CPPUnit用法简介
- SelfformModel.class.php
- 【javaweb源码】JSP+Servlet+MySQL实现注册功能
- About Maze Problem