>>1
俺Java厨だから(C++は大雑把に知ってる)
テンプレートを勘違いしてたらゴメンだけど、
20のソースはTemplate MethodじゃなくてStrategyだよ。
method1()とmethod2()を持ってるのはHogeじゃなくてImplなわけだから、
手順を表すvoid hoge()がImplのメンバーじゃない限り、
それはStrategy。

あと、不注意に作られたクラスを継承するときはともかく、
きちんと考えて書かれたクラスって、最初から継承されること考えられて
書かれてるからいじられたくないフィールドはprivateになってるし、
外部からいじられたくないけど子クラスにいじって欲しい部分はprotectedにするから、
コンポジションでも継承でも設計の簡潔さは変わらない。
少なくとも俺のコードはそうしてる。