原创 CMake: Property Propagation

1. 重點關注對象屬性(Property)的編譯標誌(Compile flags)和鏈接標誌(Link flags): Compile flags [INTERFACE_]INCLUDE_DIRECTORIES [INTERFACE_]

原创 Design Patterns 19: Observer

定義對象之間一對多的依賴性,當其中一個狀態發生變化的時候,通知並更新所有的依賴對象。 #include <list> struct Subject; struct Observer { virtual void Updat

原创 Design Patterns 21: Strategy

定義一組算法,使得算法之間具有互換性。 struct Strategy { virtual void AlgorithmInterface() = 0; }; struct ConcreteStrategyA : Strate

原创 Design Patterns 22: Template Method

定義算法的結構,將具體步驟推遲到派生類。 struct AbstractClass { void TemplateMethod() { PrimitiveOperationA(); Pr

原创 Design Patterns 18: Memento

在不違反封裝原則的前提下,捕獲記錄對象的內部狀態,使得對象具備復原的能力。 struct Memento { int GetState() { return _state; }; void SetState(Memen

原创 Design Patterns 20: State

當對象內部狀態變化時,允許改變對象自身的行爲。 struct State { virtual void Handle() = 0; }; struct ConcreteStateA : State { void Ha

原创 Design Patterns 23: Visitor

用以實現對於特定對象結構內部特定元素的具體操作。 struct AssignmentNode; struct VariableRefNode; struct NodeVisitor { virtual void Visit

原创 Design Patterns 14: Command

將請求(request)封裝成對象 struct Receiver { void Action() {} }; struct Command { virtual void Execute() = 0; }; str

原创 Design Patterns 15: Interpreter

通過定義語法來解釋自然語言 struct RegularExpression { virtual void Interpret() = 0; }; struct RepetitionExpression : RegularE

原创 Design Patterns 16: Iterator

在不暴露底層的情況下,提供遍歷組合對象的方法。 struct Aggregate; struct ConcreteAggregate; struct Iterator {}; struct ConcreteIterator : I

原创 Design Patterns 13: Chain of Responsibility

通過多個對象響應消息的方式,避免消息的發送端和接受端之間的耦合。   struct Handler { virtual void HandleRequest() { if (_successor) _s

原创 Design Patterns 17: Mediator

解耦對象之間的聯繫

原创 Design Patterns 11: Flyweight

用以高效支持數量龐大的小構件對象 #include <list> struct Context {}; struct Point {}; struct Glyph { virtual void Draw(Context)

原创 Design Patterns 10: Facade

爲一套子系統提供一個統一的界面(Facade) #include <iostream> struct BytecodeStream {}; struct Scanner { Scanner(std::istream& in

原创 Design Patterns 7: Bridge

解耦抽象界面(Abstraction)與具體實現(Implementor, ConcreteImplementorA, ConcreeteImplementorB),界面(Abstraction)與實現(Implementor)之間的關係