2011-11-07 14 views
3

私がショッピング(例えばcart..paymentプロセス)クラスを持っていると私は例えば、abstract classDocsまたはinterfaceDocsを使用することをお勧めしpaypal..is経由で支払う可能性を追加したい場合は、私は、知りたい:この状況では、インタフェースまたは抽象クラスを使用する方がよいでしょうか?

Shopping implements Visa,Paypal 

私はShoppingクラスが抽象クラスであることをお勧めしますので、インターフェースは、正しい答えであることを推測しますか?

答えて

7

どちらもありません。

Shopping(メインシステム(ショッピングカートなど)には、PaymentProcessorを実装/継承するプロバイダのリストが必要です)。 VisaおよびPayPalは、PaymentProcessorから/ inheritを実装します。

こうすれば、何らかの設定で何を入力できるのですか?PaymentProcessorが利用可能です。あなたがMasterCardを追加すると、その方法はShoppingに変更する必要はありません。

single responsibility principleをご覧ください。

+0

抽象的な実装を使用するのが最善である場合、短い例を教えてください – Uffo

+1

それは依存しています - あなたには共通の論理があるのでしょうか? –

+0

私はそれほど良いデザインパターンを理解していないので、mabeは分かりません。私はそれについてもっと詳しく調べる必要があります。しかし、私にとってはMastercard、Visaなどの共通ロジックがあります。私がそれらを必要とするときにそれらを実装してください...... PaymentProcessor。 – Uffo

1

どれも、私は言うでしょう。各支払い方法に対してクラスを持つ方がよいでしょう。私は抽象クラスPaying(または同様のもの)を使用して、すべての支払い方法で使用される側面を実装します。次に、すべてのメソッド(実際には必要ではない)と、Paying(およびVisaを実装する可能性がある)を拡張するすべてのメソッドの実際の実装のためのインターフェイスを記述することができます。

3

あなたのクラスの名前にちょうど基づいて、私はどちらも使用しないと思います。あなたが見なければならないパターンを合成といいます。 http://en.wikipedia.org/wiki/Object_compositionを参照してください。要するに

、お買い物クラスは、支払い処理された「使用」1そのものではない(つまり関係「である」ではない)

私はどちらかの支払い処理を受け入れるためにあなたのショッピングクラスを実装したいですインスタンス化されたとき、またはオブジェクトのsetメソッドを介して実行されます。

design patterns、特にGang of Fourからもお読みになりたい場合があります。

関連する問題