0
私は以下のクラス階層を持っています。次のような階層内の複数のクラスを紹介2人の子供はF()の同じ実装を持ち、他の2人の子供はFの異なる実装を持っています.4つはすべて同じクラスから派生します
class Base
{
virtual void F();
}
class Derived1 : public Base
{
void F() {
cout<< " one implementation"<<endl;
}
}
class Derived2 : public Base
{
void F() {
cout<< " one implementation"<<endl;
}
}
class Derived3 : public Base
{
void F() {
cout<< " other implementation"<<endl;
}
}
class Derived4 : public Base
{
void F() {
cout<< " other implementation"<<endl;
}
}
は、他の兄弟よりも同じ実装を持つ少数の兄弟の上記のユースケースをよりよく取り組むことができる場合、私は思っていた問題に
class Base
{
virtual void F();
}
class Base1 : public Base {
void F() {
cout<< " one implementation"<<endl;
}
}
class Base2 : public Base {
void F() {
cout<< " other implementation"<<endl;
}
}
class Derived1 : public Base1
{
}
class Derived2 : public Base1
{
}
class Derived3 : public Base2
{
}
class Derived4 : public Base2
{
}
を解決するように見えますか?私がここで欠けている明らかなデザインパターンはありますか?
私が欲しい唯一の機能がFであれば、構図で解決できるかもしれません(下記参照)。私はそれをすることが良いアイデアかどうかは分かりません。
構図
class Base
{
virtual void F();
}
class Base1 : public Base {
void F() {
cout<< " one implementation"<<endl;
}
}
class Base2 : public Base {
void F() {
cout<< " other implementation"<<endl;
}
}
class Derived1
{
Base * Fer;
Derived1()
{
Fer = new Base1();
}
}
class Derived2
{
Base * Fer;
Derived1()
{
Fer = new Base1();
}
}
class Derived3
{
Base * Fer;
Derived1()
{
Fer = new Base2();
}
}
class Derived4
{
Base * Fer;
Derived1()
{
Fer = new Base2();
}
}
あなたが単純化されて記述するものかもしれませ。 _Decorator Pattern_は私のために気になります。 –
まあ、実際には、私は正確な問題に直面しており、今私はそれを再設計し、将来の証明にしようと考えています。デコレータパターンありがとう。 – Ravi
はい、これはデコレータを使用して実現できます。 –