2

次のC++の優れたデザインパターンはありますか?

    Pet               PetOwner
     |                   |
 ---------         --------------
 |       |         |            |
Cat     Dog     CatOwner     DogOwner

つまり、付随する2つのクラス階層。あなたはこれが行われるのを見たことがありますか、そしてそれは良い習慣と考えられていますか?

さらに明確にしましょう。この設計は確かに「オープンクローズ」の原則に従います。Horse新しいもの(新しいサブクラス)を簡単に追加できるという意味で「オープン」であり、HorseOwner既存のコードを変更せずに新しいものを追加できるという意味で「クローズ」です。

これらの2つの付随する階層の目的は、たとえば、仮想関数と仮想関数をPetOwner持つことです。また、特定ので構成されています。feed()Petmake_hungry_sound()CatCatOwner

このような2つの関連する階層を置き換えることができるより良いデザインパターンはありますか?私が尋ねている理由は、物事を拡張するときに人々に同時に2つのクラスを追加することを要求することが良い習慣であると考えられるかどうか疑問に思っているからです。少し疑わしいようです...

4

3 に答える 3

2

非常に主観的な質問のようです。回答は多数あります (質問にさらに情報を追加すると、さらに多くの回答が得られます) ので、質問で利用可能なものに基づいてコメントします。

PetOwnerが単にfeed(). たとえば、すべてのペットを繁殖させるわけではなく、すべてのペットを美人コンテストに出すわけでもありません。フィードだけならPetOwner、具体的なクラスは 1 つだけで十分です。

于 2012-12-14T17:34:28.173 に答える
0

私の意見を言うと、いいえ、ペットのデザインはありますが、ペットの飼い主は具体的にする理由がなく、あいまいで複雑になりすぎてしまいます。すべての種類のペットを飼うことができるペットの飼い主を作成してから、すべてのペットに関連する機能を作成する方がよい設計です。

//in class petOwner
pet *animal;

//user wants a dog...
animal = new dog; //you now have a dog
于 2012-12-14T17:30:25.850 に答える
0

PetOwner と、ペットとそのサブクラスに餌を与えるダブルディスパッチが必要です。ペットは自分が何を食べなければならないかを知っています。ペットへの給餌を実装します。

于 2012-12-14T17:33:43.093 に答える