58_类工厂

作业讲解

  • 都响应command消息,给四个类都添加事件处理,看谁先来就能说明是否能响应和顺序
    • Frida分析程序行为的
    • X64dbg
  • 为什么:下个断点栈回溯,第4给 GetActiverView()处说明了顺序,把this指针拖过去。Doc在view里面

  • 为什么这么设计:猜测离界面最近的先来,离界面最远的后来

课程内容

类工厂

抽象实现

把结构体共有属性抽象成抽象基类

基类有SET GET函数成员,纯虚函接口绘制图形

派生类实现

把视图添加抽象基类链表与当前抽象基类指针用来保存已有图形和当前图形

鼠标按下的时候根据当前菜单选择的图形类型创建图形并保存起点

鼠标移动只是修改点的终点位置

鼠标弹起时候后保存终点位置,并存放当前图形到已有图形链表

绘制的时候先绘制链表已经存放的图形,再绘制当前的

抽象实现的缺陷:每增加一个图形就需要增加一个case语句选择正确的图形

使用函数指针实现简单类工厂

定义创建函数指针

封装new的静态函数,返回抽象类

菜单选择图形的时候就指定函数指针指向的创建图形的函数

鼠标按下的时候使当前图案类型自动指向新的派生类并设置起点

鼠标移动只是修改点的终点位置

鼠标弹起时候后保存终点位置,并存放当前图形到已有图形链表

绘制的时候先绘制链表已经存放的图形,再绘制当前的

好处

有新的图案时候直接添加函数实现画图功能

缺陷

有参数的时候需要定义新的函数指针并实现

使用类成员实现大型类工厂

调用抽象图形基类,具有存放创建图形的纯虚函数

派生类实现

类工厂指针增加到成员

菜单选择图案修改类工厂指向

鼠标按下的时候使用类工厂创建图形并用当前图形指向新的图形

鼠标移动只修改终点

鼠标弹起保存到链表

绘制的时候先绘制链表已经存放的图形,再绘制当前的

好处

有参数的时候直接重载函数就可以了

作用

生成类对象,是用来去掉switch case的套路。这里的switch case指的是类对象成员一致,只是函数成员实现差不了多少,只需要实现不同的函数成员代码

程序软件三大设计原则

  • 面向接口(抽象类的接口,函数指针)编程,而非实现(一般的成员函数)
  • 组合优先与继承(类成员和继承都能实现的时候优先使用类成员)
  • 将经常变化的部分从不变的部分中分离出来(前面两个用好了就就是变化)

作业

  1. 添加移动功能

https://github.com/xkkhh/Cracking/tree/master/05CAD02

0 条评论
发表一条评论