平民程序 - linghuye's blog

天下风云出我辈,一入江湖岁月催。皇图霸业谈笑中,不胜人生一场醉。提剑跨骑挥鬼雨,白骨如山鸟惊飞。尘事如潮人如水,只笑江湖几人回。

随笔 - 221, 文章 - 0, 评论 - 680, 引用 - 0
数据加载中……

模式总结

===========================================
特征:若干代码段不断重复,但每段均有细微之处不同.
     需要采用多个不同的策略类型完成同一流程的任务
模式:采用Template Method,可以有很多的小型定制函数.
语法:A.虚接口基类重载.
     B.模板模拟虚接口技法.(推荐)
实例:1.图层面叠加,分裁减,合并,擦除,异或,各叠加的算法流程是统一的.
     2.各种几何实体添加,分二点操作,三点操作,多点操作,各操作遵循同一操作规范流程.

 

===========================================
特征:根据某一种程序状态,分别实施不同操作.
     大量的case句法存在      
模式:采用State模式
语法:A.State或Action虚接口类体系.     
实例:1.支持50种几何图形的添加编辑操作,用户按下某图形按钮,进入该图形操作状态.使用虚接口分派鼠标事件操作,并继承实现各基本图形的操作.

===========================================
特征:需要整理杂乱无章的代码.
模式:类封装
语法:类
实例:将杂乱无章的代码封入一个类中,采用static函数,或类函数.尽量提供某统一抽象对象的语义.

===========================================
特征:A代码系统需要与B代码系统通信,但B系统不愿耦合A系统(不愿include A总体的头文件).
模式:泛用接口
语法:定义一个简单的纯需头文件接口,A系统多重继承实现该接口,并将纯粹的接口交给B. B只需要有接口即可调用.接口文件可由一方或双放方协商定义,并由任何一方保管.
实例:底层C++核心与上层OCX控件交互,不能直接取用OCX组件接口,避免耦合.

===========================================
特征:复杂WTL程序标准架构
模式: 1. CMainFrame应该是一个全暴露的透明的高层权力和调度机构,程序中所有部件都对其组成非常了解,即一个部件对其所属的CMainFrame的部件都有获取能力,以此获得与各部门协调的能力.CMainFrame主要负责多个部件同时运作时的调度. 
      2. 有一个最主要控制部件,用于最经常的业务处理,如工作区(树视,列表等)部件.
      3. 有必要的组件用模板声明获得对CMainFrame的获取能力.

===========================================
特征:细节细化
模式: 1.将每个有可能变化的行为定义到函数或类中,不管其有多么地细节,这将大大提高程序的灵活度(单一职责原则)

===========================================
特征: 对于需要某一以后可能有多个的全局变量,需要在每个类体系对象上加上变量,但为避免烦琐,可以传参数.

===========================================
1.增加一个类,在类中添加表明该类自己身份的代码.
2.在总登记处登记.
3.添加对这种类型的调度处理.

===========================================
基接口表明最小化成员应实现的方法,一个纯接口继续派生与基接口,表明额外的接口要求.
使用时利用dynamic_cast<>推导出是否是上层基接口,若是,则可以按照上层接口的规范要求调用.

===========================================
特征:类体系的基类接口需要某个派生类的定义,但这样会造成"实类"关联.
模式:为该派生类定义另一个虚接口,而该派生类实现两个接口.

=ADT编程===========================================
C++类作为一个躯壳包装内存块,不释放.

===========================================
良好的 C++ DLL 程序结构,通过C函数将虚接口暴露出来,而C++实现藏于内.

===========================================
在适当的地方加入虚函数逻辑不会导致系统效率降低.

===========================================
组合与继承的结合,继承用于将原有接口甚至其实现保留下来,组合用于将实现转发出去.
这样既可以保留原有接口不变,又能方便地添加接口,特别可以融入是另一套接口或其实现.
这样可以既不改变内部原有接口定义,又可以向外提供接口要求外部人员实现之,而后合并.
关键在于继承需要暴露内部接口,组合只需定义一个新的与内部无关的接口.

===========================================
衡量一个程序重用性标准,有多少代码是与应用相关的.

===========================================
世界帧进模式
Frame不断向前,物质在各种状态间迁移.,Frame返回false则表明物体生命期结束.
物质本身有个生物钟在Frame中提醒自己的生命.

===========================================
多线程多进程服务端编程要旨:
1.尽量编写单线程逻辑.
2.借助某部分的单线程逻辑来同步操作步骤,如物理的盯住不变量。
3.对外出口单线程,内部处理多线程.
4.注重逻辑的协调性。

===========================================
特征:两套魔兽格式解析和显示,版本不同,关键分析点不同,但分析流程相同.
模式:接口+模板
实现:定义纯虚接口描述外部调用,用模板实现该接口,Impl基本解析,而后具体分类实现再继承模板实例.(用模板来泛完成接口基本实现,再派生子类完成细节实现)
语法:
struct IMdxBone

   virtual void Test() = 0; 
};

template<class TMDX_BONE>
class TMdxBone : public IMdxBone
{
public:
  std::vector<TMDX_BONE> m_vecBones; 

   void Test() 
  {
  }
};

class CMdxBone : public TMdxBone<MDX_BONE_2>
{
public:
};

posted on 2005-08-13 17:15 linghuye 阅读(332) 评论(1)  编辑 收藏 引用 所属分类: 编程札记

评论

# re: 模式总结  回复  更多评论   

OK,this is more useful for me than any others on your blog :)
Also,interface or Component thinking is a favorite to me,
and do you know the Crystal Space,which almost has achieved a full system named SCF like COM.
2005-09-19 12:08 | forcewall
只有注册用户登录后才能发表评论。