0

電卓クラスを作成していますが、将来的に拡張できるようにしたいと考えています。将来のクラスでそれをサブクラス化する必要があるのか​​、それとも各拡張機能を新しいカテゴリにするだけなのかを判断できません。どちらがより良い選択肢ですか?

将来、この電卓クラスに追加したい場合、誰かがこの電卓クラスを拡張するための最良の方法を判断できません。各ユーザーにそれをサブクラス化させるか、追加したいメソッドのカテゴリを追加する必要があります。

私がやりたかったのは、ユーザーが「+*」などの新しい操作を定義したい場合、新しいカテゴリでそれを定義してセレクターを提供できるので、すべての操作を辞書に保存し、計算するメソッドを選択できるようにすることです結果。

例えば、

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

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

4

1 に答える 1

2

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

Visitor パターンを使用すると、「操作」メソッドを持つ必要があるオブジェクトの ID を取るメソッドを持つことができます。入力を受け取って結果を返す限り、どのような方法でも動作できます。これは、電卓クラスの残りの部分を知らなくても、無制限の操作を実装できることを意味します。

于 2012-04-22T01:21:21.097 に答える