2012-04-22 6 views
0

私は電卓のクラスを作成しています。将来、それを拡張できるようにしたいと考えています。私は将来のクラスをサブクラス化するべきかどうか、あるいは各エクステンションを新しいカテゴリにする必要があるかどうかを判断することはできません。どちらが良い選択ですか?Objective-Cでの拡張とサブクラス化、後で拡張したい電卓クラスを作成するのに適していますか?

将来的にこの電卓クラスに追加したいと思ったら、誰かがこの電卓クラスを拡張するための最良の方法を決定できません。それぞれのユーザーにサブクラス化するか、追加するメソッドのカテゴリを追加する必要があります。

私がしたかったのは、ユーザーが "+ *"と言う新しい操作を定義したい場合、新しいカテゴリで定義してセレクタを与えることができるため、すべての操作を辞書に保存してその結果を計算する方法。

例えば、

SEL method = NSSelectorFromString ( @"plusTimesWithArgA:andArgB:"; );

[self performSelector:@selector(method) withObject:operandA withObject:operandB];

+0

あなたの質問の後半部分とその例では、カテゴリと同じように見えます。ユーザーはクラス内のメソッドを上書きする必要がないためです。 – user523234

答えて

2

私はVisitorパターンを使用してお勧めします。サブクラス化はカップリングの最も厳密な形式です。クラスを拡張すると、既存のメソッドをオーバーライドするリスクがあり、大量の結合が作成されます。

訪問者のパターンには、「操作」メソッドを持つオブジェクトのIDを取得するメソッドを持つことができます。それは、入力を受け取り、結果を返す限り、どのような方法でも動作できます。つまり、残りの電卓クラスを知らなくても、無限の操作を実装できます。

関連する問題