
lua设计模式
老友小明哥
星星之火,照亮你路
展开
-
适配器模式lua实现
--[[ 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 ——Gang of Four 应用: 例如跨国公司开会,每个地区的领导说着不同的语言,但与会者却是不同地区的人,因此领导人需要翻译,这个翻译就是适配器。 例如我们玩游戏,特别玩以前不同平台的游...原创 2019-10-11 21:27:55 · 2898 阅读 · 0 评论 -
设计模式总结
创建型模式简单工厂模式lua实现工厂方法模式lua实现原型模式lua实现建造者模式lua实现单例模式lua实现抽象工厂模式lua实现结构型模式装饰模式lua实现代理模式lua实现外观模式lua实现适配器模式lua实现组合模式lua实现桥接模式lua实现享元模式lua实现行为模式策略模原创 2013-11-27 08:42:19 · 4648 阅读 · 3 评论 -
访问者模式lua实现
--[[ 1.Visitor 抽象访问者角色,为该对象结构中具体元素角色声明一个访问操作接口。该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色,这样访问者就可以通过该元素角色的特定接口直接访问它。 2.ConcreteVisitor.具体访问者角色,实现Visitor声明的接口。 3.Element 定义一个接受访问操作(accept()),它以一个访问者(Visitor)原创 2013-11-26 08:47:35 · 2012 阅读 · 0 评论 -
解释器模式lua实现
--[[ 解释器模式(Interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,用这个解释器使用该表示来解释语言中句子。 解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。 AbstractExpression 抽象解释器:具体的解原创 2013-11-25 08:48:03 · 2508 阅读 · 0 评论 -
享元模式lua实现
--[[ 设计模式中的享元模式,避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类). 它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于当大量物件只是重复因而导致无法令人接受的使用大量内存。 抽象享元(Flyweight)角色:此角色是所有的具体享元类的超类,为这些类规定出需要实现的公共接口。那些需要外蕴状态(External Stat原创 2013-11-24 02:28:49 · 2597 阅读 · 0 评论 -
职责链模式lua实现
--[[ 职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 应用: 1、有多个对象处理请求,到底怎么处理在运行时确定。 2、希望在不明确指定接收者的情况下,向多个对象中的一个提交请求。 3、可处理一个请求的对象集合应该被动态指定。]]--Handler = {}funct原创 2013-11-22 08:47:20 · 2466 阅读 · 0 评论 -
命令模式lua实现
--[[ 优点: 1.降低对象之间的耦合度。 2.新的命令可以很容易地加入到系统中。 3.可以比较容易地设计一个组合命令。 4.调用同一方法实现不同的功能。 缺点: 使用命令模式可能会导致某些系统有过多的具体命令类。因为针对每一个命令都需要设计一个具体命令类,因此某些系统可能需要大量具体命令类,这将影响命令模式的使用。 Command类:是一个抽象类,类中对需要执行的命令进行声明原创 2013-11-20 08:53:13 · 4616 阅读 · 2 评论 -
桥接模式lua实现
--[[ 桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 其实桥接模式在开发应用中使用的非常广泛,甚至即使我们没有学过桥接模式,也可能会潜意识地使用到。 例如:在游戏开发中,玩家类(Role)合成了背包(Knapsack);在背包类(Knapsack)中,又合成的物品(Item);其实这种合成就是桥接模式中的”桥“。注意的是这里是合成,而不是继承! 下面以手机为例]]-原创 2013-11-19 10:48:46 · 2559 阅读 · 0 评论 -
组合模式lua实现
--[[ 组合模式使得用户对单个对象和组合对象的使用具有一致性。 应用: 1.你想表示对象的部分-整体层次结构 2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。 定义: 1.Component 是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component子部件。 2.Leaf 在组合中表示叶子原创 2013-11-18 13:19:00 · 3346 阅读 · 0 评论 -
备忘录模式lua实现
--[[ 优点: 1、有时一些发起人对象的内部信息必须保存在发起人对象以外的地方,但是必须要由发起人对象自己读取,这时, 使用备忘录模式可以把复杂的发起人内部信息对其他的对象屏蔽起来,从而可以恰当地保持封装的边界。 2、本模式简化了发起人类。发起人不再需要管理和保存其内部状态的一个个版本,客户端可以自行管理他们所需 要的这些状态的版本。 3、当发起人角色的状态改变的时候,有可能这个状态原创 2013-11-17 11:48:32 · 2258 阅读 · 0 评论 -
迭代器模式lua实现
--[[ 访问一个聚合对象的内容而无需暴露它的内部表示 支持对聚合对象的多种遍历 为遍历不同的聚合结构提供一个统一的接口 应用: 最经典莫过于C++ STL了]]--Iterator = {}function Iterator:new(o) o = o or {} setmetatable(o,self) self.__index = self return o;e原创 2013-11-16 18:23:05 · 2274 阅读 · 0 评论 -
状态模式lua实现
--[[ 状态模式(State Pattern)是设计模式的一种,属于行为模式。 适用场景: 1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。 2.一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。]]--Work = {}function Work:new(o,s) o = o or {} setmetata原创 2013-11-15 10:04:27 · 3591 阅读 · 0 评论 -
抽象工厂模式lua实现
--[[ 工厂方法模式: 一个抽象产品类,可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类只能创建一个具体产品类的实例。 抽象工厂模式: 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类可以创建多个具体产品类的实例。]]---原创 2013-11-14 11:48:34 · 3950 阅读 · 0 评论 -
单例模式lua实现
优点 一、实例控制 单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。 二、灵活性 因为类控制了实例化过程,所以类可以灵活更改实例化过程。 缺点 一、开销 虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。 二、可能的开发混淆 使用单例对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法转载 2013-11-14 10:30:17 · 17228 阅读 · 0 评论 -
观察者模式lua实现
--[[ 抽象主题(Subject)角色:主题角色把所有对观察考对象的引用保存在一个聚集里, 每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对 象,主题角色又叫做抽象被观察者(Observable)角色,一般用一个抽象类或者一个接口 实现。 抽象观察者(Observer)角色:为所有的具体观察者定义一个接口,在得到主题的通 知时更新自己。这原创 2013-11-10 15:05:47 · 7968 阅读 · 9 评论 -
建造者模式lua实现
--[[ 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式 1 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。 2 当构造过程必须允许被构造的对象有不同表示时。]]--Director = {}function Director:new(o) o = o or {} setm原创 2013-11-09 16:37:18 · 2319 阅读 · 2 评论 -
外观模式lua实现
--[[优点:外观模式的目的不是给子系统添加新的功能接口,而是为了让外部减少与子系统内多个模块的交互,松散耦合,从而让外部能够更简单的使用子系统。当然,这是一把双刃剑。缺点:不能很好地限制客户端直接使用子系统类,如果对客户端访问子系统类做太多的限制则减少了可变性和灵活性。下面外部只与Facade交互,而Facade与System交互,从而达到上述的优点。原创 2013-11-09 11:55:35 · 2228 阅读 · 1 评论 -
模板方法模式lua实现
--模板方法模式是通过把不变行为搬移到基类,去除之类中的重复代码来体现它的优势。--下面考试试卷为例,试题都是一样的,但是答案可能不一样TestPaper = {}function TestPaper:new(o) o = o or {} setmetatable(o,self) self.__index = self return o;endfun原创 2013-11-08 23:45:41 · 3166 阅读 · 0 评论 -
原型模式lua实现
--原型模式可分为深复制和浅复制,下面以深复制为例Prototype = {}function Prototype:new(o) o = o or {} setmetatable(o,self) self.__index = self return oendfunction Prototype:Clone() return selfend原创 2013-11-08 14:03:05 · 2891 阅读 · 4 评论 -
工厂方法模式lua实现
简单工厂就是生产整个计算器,而工厂方法只生产计算器的一部;原有的简单工厂可以生'+' '-' '*' '/' ;但是如果添加新的部件'%',厂房就需要扩充、修改很可以会影响原来部件的正常生产,这就违背了开放封闭原则;而工厂方法则不存在这个问题;我新开一个工厂专门生产'%'就可以了.Factory = {}FactoryAdd = {}FactorySub = {原创 2013-11-08 12:22:39 · 3250 阅读 · 2 评论 -
代理模式lua实现
--[[ 背景:陈冠稀想追求张伯芝,但是无从下手,于是找来的谢霆疯。 陈冠稀叫谢霆疯帮他送洋娃娃、玫瑰花和巧克力。于是谢霆疯就 是代理人。]]--GiveGift = {girlname = nil}function GiveGift:new(o) o = o or {} setmetatable(o,self) self.__index = sel原创 2013-11-07 22:56:00 · 4626 阅读 · 1 评论 -
装饰模式lua实现
Person = {}Decorator = {}function Person:new(o) o = o or {} setmetatable(o,self) self.__index = self return o;endfunction Person:Show() print("我是人")endDecorator = Person:new{component =原创 2013-11-07 13:51:52 · 3318 阅读 · 0 评论 -
策略模式lua实现
Strategy = {}ConcreteStrategyA = {}ConcreteStrategyB = {}ConcreteStrategyC = {}Context = {strategy = nil}function Strategy:new(o) o = o or {} setmetatable(o,self) self.__index = self ret原创 2013-11-06 11:28:13 · 2514 阅读 · 0 评论 -
简单工厂模式lua实现
OperationFactory = {}OperationAdd = {}OperationSub = {}OperationMul = {}OperationDiv = {}function OperationAdd:new(o) o = o or {} setmetatable(o,self) self.__index = se原创 2013-11-05 12:43:44 · 4606 阅读 · 7 评论