实现专题提供实现的最新资讯内容,帮你更好的了解实现。
--[[ 背景:陈冠稀想追求张伯芝,但是无从下手,于是找来了谢霆疯。 陈冠稀叫谢霆疯帮她送洋娃娃、玫瑰花和巧克力。于是谢霆疯就 是代理人。 ]]-- GiveGift = {girlname = nil} function GiveGift:new(o) o = o or {} setmetatable(o,self) self.__index = self return o;
简单工厂就是生产整个计算器,而工厂方法只生产计算器的一部分; 原有的简单工厂可以生'+' '-' '*' '/' ;但是如果添加新的部件'%',厂房就 需要扩充、修改很可以会影响原来部件的正常生产,这就违背了 开放封闭原则;而工厂方法则不存在这个问题;我新开一个工厂专门 生产'%'就可以了. Factory = {} Operation = {} function Factory:new(o)
--原型模式可分为深复制和浅复制,下面以浅复制为例 Prototype = {} function Prototype:new(o) o = o or {} setmetatable(o,self) self.__index = self return o end function Prototype:Clone() return self end proto = Prototy
--模板方法模式是通过把不变行为搬移到基类,去除之类中的重复代码来体现它的优势。 --下面以考试试卷为例,试题都是一样的,但是答案可能不一样 TestPaper = {} function TestPaper:new(o) o = o or {} setmetatable(o,self) self.__index = self return o; end function TestP
--[[ 优点: 外观模式的目的不是给子系统添加新的功能接口, 而是为了让外部减少与子系统内多个模块的交互, 松散耦合,从而让外部能够更简单的使用子系统。 当然,这是一把双刃剑。 缺点: 不能很好地限制客户端直接使用子系统类, 如果对客户端访问子系统类做太多的限制则减少了 可变性和灵活性。 下面外部只与Facade交互,而Facade与System交互, 从而达到上述的优点。 ]]-
--[[ 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式 1 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。 2 当构造过程必须允许被构造的对象有不同表示时。 ]]-- Director = {} function Director:new(o) o = o or {} setmetatable(o,s
--[[ 抽象主题(Subject)角色:主题角色把所有对观察考对象的引用保存在一个聚集里, 每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对 象,主题角色又叫做抽象被观察者(Observable)角色,一般用一个抽象类或者一个接口 实现。 抽象观察者(Observer)角色:为所有的具体观察者定义一个接口,在得到主题的通 知时更新自己。这个接口叫做更
--[[ 工厂方法模式: 一个抽象产品类,可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类只能创建一个具体产品类的实例。 抽象工厂模式: 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类可以创建多个具体产品类的实例。 ]]-- --[[ 我的总结:
--[[ 状态模式(State Pattern)是设计模式的一种,属于行为模式。 适用场景: 1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。 2.一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。 ]]-- Work = {} function Work:new(o,s) o = o or {} setmetatable(o,self)
目标:实现一个class函数,给lua添加面向对象的特性 基础:和编译型的面向对象语言不同,在lua中不存在类的定义这样一个概念,不管是类的定义还是类的实例都需要通过lua table来模拟。我们实现的lua面向对象是prototype方式的,即类是一个lua table,这个table 定义了类实例的原型, 类的实例则是基于这个原型的另一个lua table。 关键:实现Lua面向对象可以分解为
--[[ 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 ——Gang of Four 应用: 例如联合国开会,每个国家的领导说着自己国家的语言,但接收着却有不同国家的人,因此国家领导人需要翻译,这个翻译就是适配器。 例如我们玩游戏,特别玩以前不同平台
--[[ 访问一个聚合对象的内容而无需暴露它的内部表示 支持对聚合对象的多种遍历 为遍历不同的聚合结构提供一个统一的接口 应用: 最经典莫过于C++ STL了 ]]-- Iterator = {} function Iterator:new(o) o = o or {} setmetatable(o,self) self.__index = self return o; e
--[[ 优点: 1、有时一些发起人对象的内部信息必须保存在发起人对象以外的地方,但是必须要由发起人对象自己读取,这时,使用备忘录模式可以把复杂的发起人内部信息对其他的对象屏蔽起来,从而可以恰当地保持封装的边界。 2、本模式简化了发起人类。发起人不再需要管理和保存其内部状态的一个个版本,客户端可以自行管理他们所需要的这些状态的版本。 3、当发起人角色的状态改变的时候,有可能这个状态无效,这
--[[ 组合模式使得用户对单个对象和组合对象的使用具有一致性。 应用: 1.你想表示对象的部分-整体层次结构 2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。 定义: 1.Component 是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component子部件。 2.Leaf 在组合中表示叶子
--[[ 桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 其实桥接模式在开发应用中使用的非常广泛,甚至即使我们没有学过桥接模式,也可能会潜意识地使用到。 例如:在游戏开发中,玩家类(Role)合成了背包(Knapsack);在背包类(Knapsack)中,又合成的物品(Item);其实这种合成就是桥接模式中的”桥“。注意的是这里是合成,而不是继承! 下面以手机为例 ]]-
--[[ 优点: 1.降低对象之间的耦合度。 2.新的命令可以很容易地加入到系统中。 3.可以比较容易地设计一个组合命令。 4.调用同一方法实现不同的功能。 缺点: 使用命令模式可能会导致某些系统有过多的具体命令类。因为针对每一个命令都需要设计一个具体命令类,因此某些系统可能需要大量具体命令类,这将影响命令模式的使用。 Command类:是一个抽象类,类中对需要执行的命令进行声明
--[[ 职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 应用: 1、有多个对象处理请求,到底怎么处理在运行时确定。 2、希望在不明确指定接收者的情况下,向多个对象中的一个提交请求。 3、可处理一个请求的对象集合应该被动态指定。 ]]-- Handler = {} funct
--[[ 设计模式中的享元模式,避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类). 它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于当大量物件只是重复因而导致无法令人接受的使用大量内存。 抽象享元(Flyweight)角色:此角色是所有的具体享元类的超类,为这些类规定出需要实现的公共接口。那些需要外蕴状态(External Stat
--[[ 解释器模式(Interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,用这个解释器使用该表示来解释语言中句子。 解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。 AbstractExpression 抽象解释器:具体的解
--[[ 1.Visitor 抽象访问者角色,为该对象结构中具体元素角色声明一个访问操作接口。该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色,这样访问者就可以通过该元素角色的特定接口直接访问它。 2.ConcreteVisitor.具体访问者角色,实现Visitor声明的接口。 3.Element 定义一个接受访问操作(accept()),它以一个访问者(Visitor)