2016-10-10 5 views
0

定期的にブリッジ設計パターンを使用します。しかし、継承されたオブジェクトで効果的に使用する方法については混乱しています。 struct apple :: impl:publicを使用すると、ダブルオブジェクトの果実が得られます。実装で抽象基本クラスデータメンバを使用したい抽象基底クラスにメンバーデータがある継承のあるブリッジ設計パターン

class fruit 
{ 
public: 
    virtual void print() = 0; 
private: 
    int count_; 
}; 

class apple: public fruit 
{ 
public: 
    virtual void print(); 
private: 
    int apple_count_; 
    struct impl; 
    std::unique_ptr<impl> impl_; 
}; 

struct apple::impl 
{ 
    virtual void print() { cout << "apple"; } 
}; 

void apple::print(){ impl_->print(); } 
+0

「public」、「private」、および「protected」の3つのアクセス修飾子があります。おそらく3番目を見てみましょう。 – jaggedSpire

答えて

0

ブリッジパターンのポイントは、実装とインターフェイスを分離することです。データメンバーは実装の一部であるため、インターフェイスクラスまたはそのスーパークラスに属しません。

データメンバなどの継承可能な実装コンポーネントを使用する場合は、より高いレベルでインターフェイス/実装分割を実行します。メンバーを保持するfruit::implを作成し、apple::implを継承します。実装側のクラスはインタフェース側のクラスから継承する必要はないことに注意してください。そうしないと、より明確で洗練された設計になります。

+0

合意。しかし、特別なケースとして、ブリッジパターン – ark1974

+0

@ ark1974で設計できる抽象基本クラスのメンバーデータが必要な場合は、それが特別なケースであるとは思われません。私は、メンバーのタイプだけではなく、「橋の模様」で設計されていることにもっと意義があると思わなければなりませんが、私のクリスタルボールは今日は少し曇っているようです。 –

関連する問題