Soru Fabrika Metodu modelinin gerçek dünya örnekleri


Ben sadece Fabrika Metodu'nu okudum. Anlatmayı alt-sınıflara devretmek için bir yol sağladığını anlıyorum. Ama gerçek dünya senaryosundaki olası kullanımları anlayamadım.

Herkes, okuduğum şeyle ilişkilendirebilmem için Fabrika yöntem kalıbının nasıl kullanılabileceğini gösteren tipik bir örnek verebilir.

Fabrika metodu modelinin en iyi çözüm olduğu bir problem ifadesi, bunu açıklığa kavuşturmak için yeterli olacaktır.


21
2018-03-05 10:51


Menşei




Cevaplar:


Bir fabrika tasarım modelini uygulayan bir sınıf, çoklu sınıflar arasında köprü görevi görür. SQL Server ve Oracle gibi birden çok veritabanı sunucusu kullanmanın bir örneğini düşünün. SQL Server veritabanını arka uç olarak kullanan bir uygulama geliştiriyorsanız, ancak gelecekte arka uç veritabanını oracle olarak değiştirmeniz gerekiyorsa, kodunuzu fabrika tasarım deseninden sonra yazmamışsanız tüm kodunuzu değiştirmeniz gerekir.

Fabrika tasarım modelinde bunu başarmak için çok az çalışma yapmanız gerekir. Fabrika tasarım modelini uygulayan bir sınıf sizin için önemlidir ve yükünüzü azaltır. Veritabanı sunucusundan geçiş sizi hiç rahatsız etmeyecektir. Yapılandırma dosyanızda küçük değişiklikler yapmanız yeterlidir.


43
2018-03-05 10:54



@Mahatma: bu link için teşekkürler :) - Sarfraz
@Sarfraz mükemmel örnek, gerçek dünya örneğini görselleştirmemde bana yardımcı oldu. Bunun için +1. - tugberk
Yukarıdaki örnek kod şu anda kullanılamıyor. Bu yüzden bu bağlantıyı ve yararlı buldum .. primaryobjects.com/CMS/Article81.aspx - DevT


Örnek bir php kodu:

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
2017-12-31 21:33





API'den şu an geliştiriyorum:

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

Bu örnekte, belirli bir türden Soyut Fabrika oluşturmak için Fabrika Yöntemini kullanıyorum (örnekte PICASA).

Bu iki desen genellikle birlikte kullanılır.


3
2018-03-05 10:54



PicasaWebGalleryFactory'yi neden açıkça oluşturmuyorsunuz? - Rekin
Neden bir fabrika var? WebGallery sınıfınız ve PicasaWebGallery alt sınıfınız olamaz mı? - paul


Zend_Db bunu kullanıyor Zend_Db_Adapter Bir yapılandırma nesnesinden geçirilen veritabanı ayarlarına bağlı olarak farklı türde veritabanı nesneleri oluşturulmasına izin veren sınıf.


3
2018-03-05 10:56



Diğer fabrika yöntemleri örnekleri: Zend_Cache :: factory (), Zend_Memory :: factory (). Zend_Log_Writer ayrıca Zend_Log_Writer_Abstract'ın somut adaptörlerini başlatmak için fabrika yöntemlerine de sahiptir. Bununla birlikte bir şey belirtilmelidir: Bu uygulamalar genellikle fabrika yöntemine doğrudan ürüne enjekte edildiğinde (ayrı bir AbstractCreator / ConcreteCreator sınıfı yoktur) formdadır. - Victor Farazdagi
Sadece kodu tekrar kontrol ettik: ZF aslında, bir fabrika değil (HF Design Patterns'da anlatılan) basit fabrika denen şeyi kullanır. Ayrıca, statik fabrika yöntemlerinin bir demetini gördüm, en azından uygulama, Bloch'un Etkili Java'da tartıştığı şeye çok benziyordu. Ve ben tam GoF'un Factory Method Pattern uygulamasını uygulayamadım. - Victor Farazdagi


.NET'ten bir örnek Temel Sınıf Kitaplığı (BCL) Control.CreateControlsInstance(Windows Forms) Denetim sınıfının diğer üyeleri tarafından kullanılır.

Kendi denetleme koleksiyonunuzu sağlamak için bu korumalı yöntemi geçersiz kılabilirsiniz, ör. Özel bir kontrol uygularken.


2
2018-03-05 10:59





Basit Fabrika Tasarım Deseni, Dörtlü Çetelere ait değildir. Basit bir Fabrika Kalıbı, bunlara verilen verilere bağlı olarak, birkaç olası sınıftan birinin bir örneğini döndürür. Bu, döndürdüğü sınıfların, aynı üst sınıf ve yöntemlere sahip olduğunu, ancak her birinin farklı türde veriler için farklı bir görev gerçekleştirdiğini ima eder. İşte gerçek dünya örneği ile komple yazı


0
2018-01-05 06:34



Buna Fabrika Nesnesi deniyor ve aslında bir tasarım deseni olarak görülmemektedir. - Jimbo