車を選ぶとき、誰しもが多様なデザインの中から自分にあったものを探す。しかし、多様なデザインを実現するために、それぞれにラインや工場が存在してコストがあがることは望まない。さらに、自動車はどのようなデザインでも、ハンドルや、ブレーキ、アクセルといったインターフェースは共通でなくてはならない。
工場はひとつで製品は多様。それぞれの製品の取り扱いは共通化されている。
C++で多様なクラスを設計する必要があるとき、AbstractEnemyFactoryの例はとても役に立つ。ひとつの工場、多様な製品、共通のインターフェース。Modern C++ Designにその答えがあった。
だが忘れてはならない。抽象は具体例の一般化により生まれる。シナリオ無しの設計からジェネリックなるものは生まれない。