Abstract factory

Contenu du snippet

Abstract Factory pattern est un motif Création. Patterns Création traité meilleure façon de créer un objet.
Abstract Factory est une Factory qui retourne un objet de plusieurs Factorys.
Dans cette example, l'interface Factory dispose de deux implémentations concrètes, ConcreteFactory1 et ConcreteFactory2. Le GetObject (), l'intérieur de ces classes concrètes Derived1 et retours Derived2 objets, respectivement.
Le client peut décider de la classe ConcreteFactory qui doit être utilisé pendant « Run Time ».

Source / Exemple :


using System;
using System.Collections.Generic;
using System.Text;

namespace BrickGame4AbsctractFactory
{
    interface IBrickObjects
    {
        void Rotate();
    }
}

using System;
using System.Collections.Generic;
using System.Text;

namespace BrickGame4AbsctractFactory
{
    interface  ISelect
    {
        IBrickObjects GetBrickObject();
    }
}

using System;
using System.Collections.Generic;
using System.Text;

namespace BrickGame4AbsctractFactory
{
    class ObjectH : IBrickObjects
    {
        public void Rotate()
        {
        }
    }
}

using System;
using System.Collections.Generic;
using System.Text;

namespace BrickGame4AbsctractFactory
{
    class ObjectHFactory:ISelect 
    {
        public  IBrickObjects GetBrickObject()
        {
            return (new ObjectH()); 
        }
    }
}

using System;
using System.Collections.Generic;
using System.Text;

namespace BrickGame4AbsctractFactory
{
    class Rectangle : IBrickObjects
    {
        public  void Rotate()
        {
        }
    }
}

using System;
using System.Collections.Generic;
using System.Text;

namespace BrickGame4AbsctractFactory
{
    class RectangleFactory : ISelect 
    {
        public IBrickObjects GetBrickObject()
        {
            return (new Rectangle());
        }
    }
}

using System;
using System.Collections.Generic;
using System.Text;

namespace BrickGame4AbsctractFactory
{
    class ReverseH : IBrickObjects 
    {
        public void Rotate()
        {
        }
    }
}

using System;
using System.Collections.Generic;
using System.Text;

namespace BrickGame4AbsctractFactory
{
    class ReverseHFactory : ISelect 
    {
        public IBrickObjects GetBrickObject()
        {
            return (new ReverseH());
        }
    }
}

using System;
using System.Collections.Generic;
using System.Text;

namespace BrickGame4AbsctractFactory
{
    class Square : IBrickObjects
    {
        public void Rotate()
        {
        }
    }
}

using System;
using System.Collections.Generic;
using System.Text;

namespace BrickGame4AbsctractFactory
{
    class SquareFactory : ISelect 
    {
        public IBrickObjects GetBrickObject()
        {
            return (new Square());
        }
    }
}

using System;
using System.Collections.Generic;
using System.Text;

namespace BrickGame4AbsctractFactory
{
    class Straightline : IBrickObjects
    {
        public void Rotate()
        {
        }
    }
}

using System;
using System.Collections.Generic;
using System.Text;

namespace BrickGame4AbsctractFactory
{
    class StraightlineFactory : ISelect 
    {
        public IBrickObjects GetBrickObject()
        {
            return (new Straightline());
        }
    }
}

Client Code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace BrickGame4AbsctractFactory
{
    public partial class Main : Form
    {
        ISelect m_ObjSelect;
        public Main()
        {
            InitializeComponent();
        }

        private IBrickObjects ActivateObject(string ObjectName)
        {
            switch (ObjectName)
            {
                case "Square":
                    m_ObjSelect = new SquareFactory();
                    break;
                case "Straightline":
                    m_ObjSelect = new StraightlineFactory();
                    break;
                case "Rectangle":
                    m_ObjSelect = new RectangleFactory ();
                    break;
                
            
            }
            return m_ObjSelect.GetBrickObject() ;

        }
        private void Main_Load(object sender, EventArgs e)
        {
	
            IBrickObjects l_objBrickObject = ActivateObject("Square"); 
            l_objBrickObject.Rotate();
 
        }
    }
}

Conclusion :


L'interface a IBrickObjects,la méthode qui doit être appliquée par tous les objets de la brique.
Les formes ISelect interface de l'interface de l'usine de tous les objets de Brick objet qui sera l'objet exact pour appeler la méthode GetObject.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.