Rzeczywiste przykłady wzoru metody Fabrycznej

Właśnie przeczytałem metodę fabryczną. Rozumiem, że zapewnia to sposób na delegowanie instancji na podklasy. Ale nie mogłem zrozumieć możliwych zastosowań w realnym scenariuszu.

Czy ktoś może podać jeden typowy przykład pokazujący, jak można zastosować wzorzec metody Fabrycznej, abym mógł odnieść się do tego, co przeczytałem.

Stwierdzenie problemu, dla którego wzorca metody fabrycznej jest najlepszym rozwiązaniem, byłoby wystarczające, aby to wyjaśnić.

Author: Ravi, 2010-03-05

6 answers

Klasa implementująca wzorzec projektowania fabrycznego działa jako pomost między wieloma klasami. Rozważ przykład użycia wielu serwerów baz danych, takich jak SQL Server i Oracle. Jeśli tworzysz aplikację wykorzystującą bazę danych SQL Server jako backend, ale w przyszłości będziesz musiał zmienić bazę danych na oracle, będziesz musiał zmodyfikować cały kod, jeśli nie napisałeś kodu zgodnie z fabrycznym wzorcem projektowym.

W factory design pattern trzeba zrobić bardzo mało pracy, aby osiągnąć to. Klasa realizująca wzorzec projektowania fabrycznego dba o Ciebie i zmniejsza twoje obciążenie. Przełączanie z serwera bazy danych w ogóle nie będzie Ci przeszkadzać. Musisz tylko wprowadzić małe zmiany w pliku konfiguracyjnym.

 44
Author: Sarfraz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-05 10:54:05

Przykładowy kod 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;
    }
}
 5
Author: Mohamad Rostami,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-31 21:33:32

Z API właśnie się rozwijam:

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

W tym przykładzie używam metody Factory do tworzenia abstrakcyjnej fabryki określonego typu (PICASA w przykładzie).

Te dwa wzory są często używane razem.

 3
Author: Roman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-05 10:54:58

Zend_Db używa go w swojej klasie Zend_Db_Adapter, aby umożliwić tworzenie różnego rodzaju obiektów bazodanowych w oparciu o Ustawienia bazy danych przekazywane z obiektu konfiguracyjnego.

 3
Author: Tobias Cohen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-05 10:56:01

Jednym z przykładów z biblioteki klas bazowych. NET (BCL) jest kontrolka .CreateControlsInstance, która jest używana przez wiele innych członków klasy kontrolnej (Windows Forms).

Możesz nadpisać tę chronioną metodę, aby zapewnić własną kolekcję kontrolek, np. podczas implementacji kontrolki niestandardowej.

 2
Author: Mark Seemann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-05 10:59:04

Prosty wzór fabryczny nie należy do gangów czterech. Prosty wzorzec fabryczny to taki, który zwraca instancję jednej z kilku możliwych klas, w zależności od dostarczonych mu danych. Oznacza to, że zwracane klasy mają tę samą klasę nadrzędną i metody, ale każda z nich wykonuje zadanie inaczej dla innego rodzaju danych. Oto kompletny post z prawdziwym przykładem świata

 0
Author: Anil Sharma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-05 06:34:43