SORU
23 EKİM 2012, Salı


Tasarım Desenleri: Fabrika Fabrika yöntemi vs vs Soyut Fabrika

Web tasarım desenleri okuyordum

Fabrika, Fabrika yöntemi ve Soyut fabrika okudum ama çok kafa karıştırıcı, tanımı konusunda net değilim. Tanımlarına göre

Fabrika - müşteri için örnekleme mantığı ifşa etmeden nesneleri Oluşturur ve ortak bir arayüz üzerinden yeni oluşturulan nesneyi ifade Eder.Fabrika Yöntemi basitleştirilmiş bir sürümüdür

Fabrika Yöntemi oluşturma nesneler için bir arabirim Tanımlar, ama alt sınıflar oluşturmak ve ortak bir arayüz üzerinden yeni oluşturulan nesneyi Gösterir karar verin.

Soyut Fabrika - açıkça kendi sınıflarını belirtmeden ilgili nesnelerin bir aile oluşturmak için arayüz Sunar.

Ben de diğer stackoverflow konuları Soyut Fabrika vs Fabrika Yöntemi ile ilgili diyagramlar çizilmiş ama orada benim anladığım daha da kötü hale UML baktı.

Herkes söyleyebilir

  1. Nasıl bu üç desen birbirinden farklıdır?
  2. Ne zaman kullanılacak?
  3. Ve ayrıca, eğer mümkünse, herhangi bir java örnekler, bu modelleri ile ilgili?

CEVAP
23 EKİM 2012, Salı


Her üç Fabrika türleri aynı şeyi: bir "akıllı yapıcı".

Hadi Meyve iki tür oluşturmak için mümkün olmak istiyorum söylüyorlar: Elma ve Portakal.

Fabrika

Fabrika "" hayır sınıflara uygulama. sadece bir tane var, o sabit. Bu durumda, böyle bir sınıf var

class FruitFactory {

  public Apple makeApple() {
    // Code for creating an Apple here.
  }

  public Orange makeOrange() {
    // Code for creating an orange here.
  }

}

Kullanım: bir Elma Yapımı veya Portakal biraz da yapıcı olarak işlemek için çok karmaşık.

Fabrika Yöntemi

Fabrika yöntemi genellikle bir sınıfta bazı genel işlem olduğunda kullanılır, ama aslında kullanmak değişir. Yani:

abstract class FruitPicker {

  protected abstract Fruit makeFruit();

  public void pickFruit() {
    private final Fruit f = makeFruit(); // The fruit we will work on..
    <bla bla bla>
  }
}

...sonra alt: fabrika yöntemi uygulayarak FruitPicker.pickFruit() ortak işlevlerini yeniden kullanabilirsiniz

class OrangePicker extends FruitPicker {

  @Override
  protected Fruit makeFruit() {
    return new Orange();
  }
}

Soyut Fabrika

Soyut fabrika normalde kullanılan şeyler gibi bağımlılık enjeksiyon/strateji, ya da olmak istiyorsan oluşturabilir bir aileye ait tüm nesneler gereken "aynı tür", henüz bazı ortak temel sınıflar. İşte meyve ile ilgili hayal meyal bir örnek. Kullanın diye burada yanlışlıkla bir Elma bir OrangePicker kullanmıyoruz emin olmak istiyoruz. Biz bizim Meyve almak ve aynı fabrikadan Seçici olarak uzun bir maç olacak.

interface PlantFactory {

  Plant makePlant();

  Picker makePicker(); 

}

public class ApplePicker implements PlantFactory {
  Plant makePlant() {
    return new Apple();
  }

  Picker makePicker() {
    return new ApplePicker();
  }
}

public class OrangePicker implements PlantFactory {
  Plant makePlant() {
    return new Orange();
  }

  Picker makePicker() {
    return new OrangePicker();
  }
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Diogo Oliveira

    Diogo Olivei

    4 HAZİRAN 2006
  • Ownage Pranks

    Ownage Prank

    13 AĞUSTOS 2007
  • Virtual Riot

    Virtual Riot

    19 Mayıs 2011