インターフェースライブラリ
C++でインターフェースベースのライブラリを設計している。
- IButtonというインターフェースからIPushButton、IRadioButton、ICheckBoxというインターフェースが派生している。
- ライブラリの使用者には、この4つのインターフェースと、その実装のインスタンスを生成するための関数(もしくはファクトリクラス)だけが見えている。
- これらの実装クラスに共通してgetHandleというメソッドを設けたいが、このメソッドはライブラリ使用者には必要のない内部的なものなので、IButtonでは定義したくない。
- もちろん、getHandleの具体的な処理はそれぞれのクラスで異なる。
さてどうしよう。
- 素直にIButton内でgetHandleメソッドを宣言する。
- IButtonを引数にとる関数を作って実行時型情報を元に場合分けする。
- 多重継承を使う。
1はできれば避けたい。2はオブジェクト指向っぽくない。3は必要以上にごちゃごちゃしそう。ほかに良い解決策があるのか、そもそもこの設計自体が悪いのか。
コメント