博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

02 2012 档案

摘要:定义:迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。场景:我们有两个聚合A和B,有一个聚合管理的类,包含聚合A和B,而这个管理类的功能就是依次遍历它所包含的聚合中的元素并打印到控制台上。每个聚合中的元素存放的方式是不同的,有的用的是数组,有的可能是vector或者list等,因此我么为每个聚合定义了一个迭代器,管理类只需要依次获取各聚合的迭代器,使用迭代器去遍历其中的元素,而不需要去理会聚合中元素的存放方式。类图:c++代码如下:#include <iostream>#include <vector>using namespace st 阅读全文

posted @ 2012-02-09 15:35 开源云 阅读(1377) 评论(0) 推荐(0)

摘要:定义:模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。钩子的定义:钩子是一种被声明在抽象类中的方法,但只有空的或者默认的实现。钩子的存在,可以让子类有能力对算法的不同点进行挂钩。究竟需不需要挂钩,则由子类自行决定。场景:我们有一个咖啡厅,有一个专门的配方来调制咖啡喝茶,在调制的过程中的某些方法其实是比较类似的,步骤如下:1、把水煮沸2、用热水泡咖啡或茶3、把饮料倒进杯子4、在饮料内加入适当的调料,咖啡要加糖和牛奶,而茶需要加柠檬。在调料添加的时候,我们需要询问顾客是否需要添加调料,此时就会用到钩子。类 阅读全文

posted @ 2012-02-09 15:15 开源云 阅读(1483) 评论(0) 推荐(0)

摘要:定义:外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。示例图:如上图,我们的Facade提供了几个简化的接口,将子系统的功能封装起来,这样我们就可以通过调用这几个简化的接口来实现我们想要的功能。但外观模式依然将系统的完成功能暴露出来,我们不仅可以操作简化的接口,也可以直接操作系统底层的高级方法。外观模式允许我们让客户和子系统之间避免紧耦合。因为我们客户代码是针对外观而不是针对子系统编写的。如果当初你的客户代码是针对外观而不是针对子系统编写的,现在你就不需要改变客户代码,只需要修改外观代码即可。此处就不具c++代码的例子啦。参考图书:《Hea 阅读全文

posted @ 2012-02-02 15:07 开源云 阅读(750) 评论(0) 推荐(0)

摘要:定义:适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。场景:我们有一只鸭子和一只火鸡,鸭子会嘎嘎叫,而火鸡会咯咯叫,鸭子飞的要远一点,而火鸡只能飞行一小段距离。火鸡和鸭子都会叫,但是他们的叫声不同,接口也不同,飞行的接口相同但是飞行的行为不同。对象适配器:使用对象的组合,以修改的接口包装被适配者。该种做法的优点是被适配者的任何子类都可以搭配着适配器使用。我们分别实现鸭子和火鸡的适配器,鸭子适配器关联了一个鸭子对象,继承自火鸡对象,这样我们可以覆盖火鸡的接口以适应鸭子的行为。同样,火鸡适配器关联了一个火鸡对象,继承自鸭子对象,这样我们就可以覆盖鸭子的 阅读全文

posted @ 2012-02-02 14:18 开源云 阅读(1770) 评论(0) 推荐(0)

摘要:Lua与c++互调上一节我们实现了一个c++的封装类,通过该类我们就可以调用lua中的函数。可是这还满足不了我们的需求,我们还想通过lua来调用我们c++的方法。通过研究/tolua++-1.0.93/src/tests下的例子,结合c++的特性,我总结了一个tolua的例子。不能说相当完美,但是基本的功能已经能够满足项目的需求了,而且通过这个例子,也可以使各位对tolua的语法以及用法有一个初步的了解。本例只是一个简单的lua与c++互调的示例,如果想要更进一步的学习tolua,可以参考/tolua++-1.0.93/src/tests下的例子,那些例子都是相当的经典。另外鉴于tolua的强 阅读全文

posted @ 2012-02-01 10:45 开源云 阅读(8103) 评论(0) 推荐(2)

摘要:C++调用lua本节我将一步一步带领大家完成c++调用lua函数并接受lua的返回值,通过分析调用的方式来封装一个类,最终封装完成的类并不是最优的,但应该能够满足一般的项目中对lua调用的功能。不足之处欢迎大家给予指正。1 基本概念1.1 栈c++调用lua是通过一个抽象的栈来实现数据的交换的。C++调用lua时,首先需要把lua函数需要的参数压入这个抽象的栈中,如果c++想要从lua中获取数据,则lua需要先把数据压入栈中,然后c++从栈中取得需要的数据。Lua是以严格的LIFO规则来操作栈的,即后进先出原则,而c++则可以操作栈上的任何一个元素。2 常用函数void lua_pushnil 阅读全文

posted @ 2012-02-01 10:32 开源云 阅读(4793) 评论(1) 推荐(1)