web-dev-qa-db-fra.com

Exemples concrets de modèles de méthode d'usine

Je viens de lire la méthode d'usine. Je comprends que cela fournit un moyen de déléguer l’instanciation à des sous-classes. Mais je ne pouvais pas comprendre les utilisations possibles dans un scénario du monde réel.

Quelqu'un peut-il donner un exemple typique montrant comment le motif de la méthode Factory peut être utilisé afin que je puisse me rapporter à ce que j'ai lu.

Un énoncé de problème pour lequel le modèle de méthode d’usine est la meilleure solution serait suffisant pour le préciser.

24
devnull

Une classe implémentant un modèle de conception d'usine fonctionne comme un pont entre plusieurs classes. Prenons un exemple d'utilisation de plusieurs serveurs de base de données tels que SQL Server et Oracle. Si vous développez une application utilisant la base de données SQL Server en tant que backend, mais que vous deviez ultérieurement changer de base de données en Oracle, vous devrez modifier tout votre code, si vous ne l’avez pas écrit conformément au modèle de conception usine.

Dans le modèle de conception d'usine, vous devez faire très peu de travail pour y parvenir. Une classe mettant en œuvre un modèle de conception d'usine prend soin de vous et allège votre fardeau. Passer du serveur de base de données ne vous dérangera pas du tout. Vous devez juste faire quelques petites modifications dans votre fichier de configuration.

48
Sarfraz

Un exemple de code php: 

interface DbTable
{
    public function create($array);
}

class MySqlTable implements DbTable
{
    public function create($array)
    {
        // add a record to a table on mysql database
    }
}

class OracleTable implements DbTable
{
    public function create($array)
    {
        // add a record to a table on Oracle database
    }
}

class TableFactory
{
    private $dbTypeConfig = 'mysql';

    public function createTable()
    {
        if ($this->dbTypeConfig == 'mysql') {
            return new MySqlTable();
        } elseif ($this->dbTypeConfig == 'Oracle') {
            return new OracleTable();
        }
        return null;
    }
}
7
Mohamad Rostami

Depuis l'API que je développe en ce moment:

WebGalleryFactory factory = WebGalleryFactory.newInstance (WebGalleryType.PICASA);
WebAlbum album = factory.createAlbum (title, description);

Dans cet exemple, j'utilise Factory Method pour créer Abstract Factory d'un certain type (PICASA dans l'exemple).

Ces deux modèles sont souvent utilisés ensemble.

3
Roman

Zend_Db l'utilise dans Zend_Db_Adapter class pour permettre la création de différents types d'objets de base de données en fonction des paramètres de base de données transmis à partir d'un objet de configuration.

3
Tobias Cohen

Un exemple de la bibliothèque de classes .NET Base (BCL) est Control.CreateControlsInstance , utilisé par de nombreux autres membres de la classe de contrôle (Windows Forms).

Vous pouvez remplacer cette méthode protégée pour fournir votre propre collection de contrôles, par exemple. lorsque vous implémentez un contrôle personnalisé.

2
Mark Seemann

Le modèle de conception d'usine simple n'appartient pas aux Gangs of Four. Un modèle d'usine simple est l'un des modèles qui renvoie une instance de l'une des classes possibles, en fonction des données qui lui sont fournies. Cela implique que les classes renvoyées ont la même classe et les mêmes méthodes parent, mais chacune d’elles effectue sa tâche différemment pour différents types de données. Voici l’article complet avec un exemple du monde réel

0
Anil Sharma