模板方法模式:
定义:定义一个操作中的算法的骨架,而将一些步骤延伸到子类中。模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。
(1),用了继承,并且肯定这个继承有意义的情况下,就应该要成为子类的模板,所以重复的代码都应该提升到父类中,而不是让每个子类去重复。
(2),当我们要完成某一个细节层次一致的过程或者一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑模板方法模式来处理。
(3),模板方法模式通过把不变的行为搬移到超类,去除子类中的重复代码来体现它的优势。
(4),党不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变形为的纠缠。
Effective C++:
1:设计 class 犹如设计 type
Class的设计就是 type 的设计。在定义一个新的 type 之前,请确定你已经考虑好以下覆盖的讨论主题。(Oh , my god ! )
(1),新类型的对象该如何创建和销毁?
(2),对象的初始化和对象的赋值有什么样的差别?
(3),新类型的对象如果被 passed by value ,意味着什么?
(4),什么是新类型的合法值?
(5),你的新类型需要配合某个继承图系(inheritance graph)吗?
(6),你的新类型需要什么样的转换?
(7),什么样的操作符和函数对此新类型而言是合理的?
(8),什么样的标准函数应该被驳回?
(9),谁该取用新类型的成员?
(10),什么是新类型的“未声明接口?
(11),你的新类型有多么一般化?
(12),你真的需要一个新类型么?
2:宁以 pass-by-reference-to-const 替换 pass-by-value
(1),尽量以 pass-by-reference-to-const 替换 pass-by-value 。前者通常比较高效,并且可以避免切割问题 (slicing problem)。
(2),以上规则并不适用内置类型,以及 STL 的迭代器和函数对象。对他们而言,往往 pass-by-value 比较合适。
3:必须返回对象时,别妄想返回其 reference
(1),绝不要返回 pointer 或 reference 指向一个 local stack 对象,或返回 reference 指向一个 heap-allocated 对象,或返回 pointer 或 reference 指向一个 local static 对象而有可能同时需要多个这样的对象。单线程中合理返回 reference 指向一个 local static 对象,可参考单例模式。