Design PAttern Factory



  • hallo, hab eine kleine frage,

    kann mir wer ein ausprogrammiertes, kleiens BSP mit dem Design Pattern FActory schicken?
    ich bräcuhte es um jeweils zwei andere Objekte zu erstellen

    danke





  • Das Entwurfsmuster Abstrakte Fabrik ist für die Erstellung verschiedener Gruppen von Produkten gedacht. Hier ein Beispiel:

    #include <iostream>
    #include <string>
    
    class AutoFabrik
    {
    public:
    	virtual ~AutoFabrik(){}
    
    	virtual std::string erstelleKarosserie() const = 0;
    	virtual std::string erstelleMotor() const = 0;
    };
    
    class OpelFabrik : public AutoFabrik
    {
    public:
    	virtual ~OpelFabrik(){}
    
    	virtual std::string erstelleKarosserie() const
    	{
    	    return "Opel Karosserie";
        }
    
    	virtual std::string erstelleMotor() const
    	{
    	    return "Opel Motor";
    	}
    };
    
    class AudiFabrik : public AutoFabrik
    {
    public:
    	virtual ~AudiFabrik(){}
    
    	virtual std::string erstelleKarosserie() const
    	{
    	    return "Audi Karosserie";
        }
    
    	virtual std::string erstelleMotor() const
    	{
    	    return "Audi Motor";
    	}
    };
    
    void fabrikation(const AutoFabrik &fabrik)
    {
        std::cout << fabrik.erstelleMotor() << "\n";
        std::cout << fabrik.erstelleKarosserie() << std::endl;
    }
    
    int main()
    {
        fabrikation(OpelFabrik());
        fabrikation(AudiFabrik());
    }
    


  • nennt man das beispiel zuvor nicht Factory method?

    eine Abstract Factiory ist doch eher folgende code? kann man das beispiel noch verbessern?

    // This is the AbstractProduct
    class Car
    {
    public:
        virtual void DisplayModel () = 0;
    };
    
    // This is a ConcreteProduct
    class Maruthi : public Car
    {
    public:
        virtual void DisplayModel ()
        {
            cout << "Maruthi" << endl;
        }
    };
    
    // This is another ConcreteProduct
    class Ferrari : public Car
    {
    public:
        virtual void DisplayModel ()
        {
            cout << "Ferrari" << endl;
        }
    };
    
    // This is the AbstractCreator
    class CarFactory
    {
    public:
        // This is the abstract declaration of the Factory Method.
        virtual Car* CreateCar () = 0;
    }
    
    // This is a ConcreteCreator
    class MaruthiFactory
    {
    public:
        // This is a Concrete definition of the Factory Method
        virtual Car* CreateCar ()
        {
            return new Maruthi();
        }
    };
    
    // This is a ConcreteCreator
    class FerrariFactory
    {
    public:
        // This is a Concrete definition of the Factory Method
        virtual Car* CreateCar ()
        {
            return new Ferrari();
        }
    };
    
    int main (void)
    {
        Car *c1, *c2;
        CarFactory *cf1, *cf2;
    
        cf1 = new MaruthiFactory ();
        cf2 = new FerrariFactory ();
    
        c1 = cf1->CreateCar ();
        c2 = cf2->CreateCar ();
    
        c1->DisplayModel (); // Displays "Maruthi"
        c2->DisplayModel (); // Displays "Ferrari"
    }
    

Anmelden zum Antworten