设计原则、结构与模式
文章平均质量分 88
Cloud_Castle
视野多大,舞台就有多大
展开
-
设计模式初探1——策略模式(Strategy Pattern)
策略模式:定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。原创 2014-10-31 15:20:19 · 1644 阅读 · 0 评论 -
从零开始实现信号槽机制:一
我们从一个具体的问题入手:“现在有一堆按钮,用来控制一堆电器,它们之间可能是一对多,也可能是多对一,如何设计这个结构?”这里有个形象的图:为了实现组件间的控制,我们很容易想到“回调函数”,对于C++开发者,我们肯定不希望一个类自身的处理函数存在于类外,但是类成员函数中被自动添加的隐形this形参造成了函数指针调用的不匹配,于是我们想到了使用static成员函数:原创 2015-09-04 13:49:30 · 7545 阅读 · 7 评论 -
从零开始实现信号槽机制:二
到这里应该差不多了,总结一下。我们在上篇博文中实现的sigslot机制已经能够比较好地实现两个组件之间的解耦,但是缺点是设计库时需要针对不同参数数量的信号与链接需要重复编码,槽函数必须继承一个共同的基类等。而Qt的信号槽机制建立在其庞大的元对象体系之上,由于其信号与槽函数的参数类型可以随时随地查到,因此在传参时可以仅仅传递一个void*类型的指针,然后通过虚函数机制调用为被调类写好的qt_matecall(),就很容易对参数反向解析从而调用相应的槽函数了。基本上是以一定的性能损失换来了更高的灵活性,也算是各原创 2015-09-04 21:19:23 · 13347 阅读 · 4 评论 -
使用Qt编写模块化插件式应用程序
动态链接库技术使软件工程师们兽血沸腾,它使得应用系统(程序)可以以二进制模块的形式灵活地组建起来。比起源码级别的模块化,二进制级别的模块划分使得各模块更加独立,各模块可以分别编译和链接,模块的升级不会引起其它模块和主程序的重新编译,这点对于大系统的构建来说更加实用。另一方面,对于商业目的明显的企业,各模块可以独立设置访问权限,开发成员只能访问自己负责的模块,其它模块是不能也不给看到的,这样减少了整转载 2014-10-22 09:26:42 · 1945 阅读 · 0 评论 -
抽象类与接口 虚函数、纯虚函数与非虚函数
抽象类 & 接口一、抽象类: 抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。二、接口: 接口是引用类型的,类似于类,和抽象转载 2014-10-30 21:54:15 · 1663 阅读 · 0 评论 -
再谈QVector与std::vector——使用装饰者让std::vector支持连续赋值
使用Qt的容器时总是让人省心,不仅是它同时提供了C++ Style和Java Style的操作接口,并且还支持下面这样的连续赋值方式:而std::vector时显然就没有这么贴心了,对于不同且没规律的赋值,循环都不好用,只好一个个地push_back();不过好在,我们可以用装饰类为std::vector添加这个功能原创 2015-09-01 14:31:17 · 8775 阅读 · 0 评论 -
交互设计原则
交互设计原则:常见附加工作陷阱不要强迫用户到另外一个窗口中完成影响本窗口的功能;不要强迫用户记住他将事物放在层次文件系统中的哪个位置;不要强迫用户调整窗口大小,当窗口在屏幕上弹出时,程序应该为其内容调整合适的大小。不要让它大而空,或者小而需要不停地滚动;不要强迫用户移动窗口,如果桌面上存在空闲空间,将窗口放在其中,而不是直接将其放在已经打开的程序之上;不要强迫用户重新进入个人设转载 2014-06-10 15:49:43 · 3118 阅读 · 0 评论 -
交互设计的KISS原则
KISS原则就是Keep It Simple and Stupid. 简单是软件设计之美, 简单的设计使得软件产品易于开发, 易于维护. 简单代表着高质量, 少加班, 每个人都希望自己的工作是简单的. 在KISS原则之外, 应该有一个更重要的原则: Useful. 满足需求是一切产品的低限. 也许需求本身也应该KISS, 简单的需求意味着底成本, 高效率. 可惜客户有时候很难克制自己的转载 2014-06-10 16:02:08 · 2382 阅读 · 0 评论 -
设计模式初探4——抽象工厂(Abstract Factory)
抽象工厂:为一个产品家族提供了统一的创建接口。当需要这个产品家族的某一系列的时候,可以从抽象工厂中选出相对系的系列来创建一个具体的工厂类别。原创 2014-11-06 13:48:03 · 1608 阅读 · 0 评论 -
设计模式初探3——装饰者模式(Decorator Pattern)
装饰者模式:动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。原创 2014-11-03 17:22:55 · 1583 阅读 · 0 评论 -
设计模式初探2——观察者模式(Observer Pattern)
观察者模式:定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户原创 2014-11-03 10:08:07 · 1455 阅读 · 0 评论 -
再谈QVector与QByteArray——Qt的写时复制(copy on write)技术
我们在之前的博文QVector的内存分配策略 与再谈QVector与std::vector——使用装饰者让std::vector支持连续赋值简单聊了聊QVector内存分配和赋值方面的一点东西,今天接着从QVector展开谈谈Qt的写时复制技术...原创 2016-01-28 23:00:01 · 11546 阅读 · 1 评论