Implementation verstecken.



  • Moin.
    Kleine Noobfrage hehe:

    class VFoo
    {
    protected:
      virtual int bar() = 0;
    };
    class Foo : public VFoo
    {
    public:
      virtual int bar() { return m_bar; }
    private:
      int m_bar;
    };
    
    class Device
    {
      VFoo* GetFoo() { return new VFoo(); }
    };
    

    So kennt man dieses Pattern denke ich zur genüge. Irrlicht, AngelScript und andere GameEngines/Libraries verwenden das so gerne. In Java ist das afaik in ähnlicher Art auch sehr beliebt.
    Man könnte statt einer Klasse auch viele Factory-Methoden verwenden, um das ganze übersichtlicher zu machen (je nach Gusto).

    Was für Methoden gäbe es noch, wenn man dieses Pattern verwendet? Oder gibt es andere Möglichkeiten, Implementation strikt von Definition zu trennen?
    Ich mag es, ein "sauberes" interface nach aussen zu liefern, in dem nur öffentliche und protected-Methoden sichtbar sind.
    rya.





  • Shade Of Mine schrieb:

    pimpl

    Danke für den Link, das sieht gut aus 🙂
    rya.



  • Scorcher24 schrieb:

    Was für Methoden gäbe es noch, wenn man dieses Pattern verwendet? Oder gibt es andere Möglichkeiten, Implementation strikt von Definition zu trennen?

    Afaik zur Trennung von Abstraction und Implementation ist das Bridge Pattern ein Klassiker. Das "Pimpl Idiom", scheint mir eine Variante dessen (hab mich da selber aber auch erst vor 2 Wochen eingelesen).

    Zu groberer Abtrennen der Implementation und GUI bzw innerhalb von GUIs, gehn auch Command oder Observer-aehnliche Gebilde (Signal/Slot, MVC, etc), aber das war glaube ich nicht gefragt.



  • Ich denke pimpl und Bridge haben unterschiedliche Ideen die sie verfolgen - der Code sieht aehnlich aus. Aber du hast bei pimpl zB garnicht den Versuch Implementation und Interface jeweils austauschbar zu machen.



  • Shade Of Mine schrieb:

    Ich denke pimpl und Bridge haben unterschiedliche Ideen die sie verfolgen - der Code sieht aehnlich aus. Aber du hast bei pimpl zB garnicht den Versuch Implementation und Interface jeweils austauschbar zu machen.

    Pimpl ist fuer mich ziemlich neu. Daher sah Pimpl wohl auf den ersten Blick aus wie eine "innere Bridge", wie zB auch innerere Proxy Klasse moeglich sind, afaik. Allerdings kam ich auf Pimpl auch aus anderer Motivation. Interessant.

    Somit kenne ich zur Trennung von Interface und Implementierung nur das Bridge Pattern: ...so that the two can vary independently! 🤡


Anmelden zum Antworten