Language strategies: deep copy vs. shallow reference
Basic C++ Strategies:
- encapsulate using classes
- polymorphically substitute deriveds for interfaces and abstract classes
- parameterize using templates
- mixin with multiple inheritance
Strategies for change: bind to abstraction through interfaces, object factories, and DLL packages
Strategies for flexibility: provide plug-in architecture through pluggable factory and interfaces
Other strategies for extension: veneer and bolt-in wrappers, functor-based template policies
Strategies for notification: command pattern
Strategies for sharing: member data, static members
Performance strategies: object pooling, copy on write, pass and return references instead of values,
lazy evaluation, caching
Robustness: use exceptions - catch as close to throw as practical, each class takes responsibility
for resource allocation, deallocation, and error handling