SORU
25 NİSAN 2010, Pazar


Anlamama yardım et "Dekoratör Desen" gerçek dünya örneği ile lütfen.

Bu ders çalışıyordumDekoratör DesenGOF belirtildiği gibi. Benim için karmaşık bir tasarım deseni gibi görünüyor.

Bu yüzden lütfen, beni anlamak yardımDekoratör Desen. Birisi bu gerçek dünyada yararlı olduğu kullanım-örnek bir örnek verebilir misiniz?

CEVAP
25 NİSAN 2010, Pazar


Dekoratör desen dinamik olarak ekleme tek bir amaç elde herhangi bir nesneye sorumlulukları.

Pizza dükkanı bir durumda düşünün. Pizza dükkanında kaç pizza çeşidi satacaklar ve menüde de soslar sağlayacaktır. Şimdi düşünün eğer pizza dükkanı pizza her birleşimi için fiyatları sağlamak ve tepesi varsa durum onda. Eğer dört temel pizza ve 8 farklı sos varsa bile, uygulama çılgın pizzalar ve soslar tüm bu beton bileşimini korumak gider.

İşte dekoratör desen.

Dekoratör başına desen, dekoratörler ve pizzalar bu garnitürler ile süslenmiş olacak gibi garnitürler gerçekleştireceksiniz' dekoratörler. Hemen hemen her müşterinin isteği ve son fatura tutarı onun soslar temel pizza ve ayrıca sipariş soslar, oluşacak isterim. Her tepesi dekoratör dekorasyon olduğunu pizzalar duyar ve fiyat. () GetPrice nesne Tepesi yöntemi pizza ve tepesi hem de toplu fiyat dönecekti.

EDİT

İşte açıklama yukarıdaki kod örneği, bir.

public abstract class BasePizza
{
    protected double myPrice;

    public virtual double GetPrice()
    {
        return this.myPrice;
    }
}

public abstract class ToppingsDecorator : BasePizza
{
    protected BasePizza pizza;
    public ToppingsDecorator(BasePizza pizzaToDecorate)
    {
        this.pizza = pizzaToDecorate;
    }

    public override double GetPrice()
    {
        return (this.pizza.GetPrice()   this.myPrice);
    }
}

class Program
{
    [STAThread]
    static void Main()
    {
        //Client-code
        Margherita pizza = new Margherita();
        Console.WriteLine("Plain Margherita: "   pizza.GetPrice().ToString());

        ExtraCheeseTopping moreCheese = new ExtraCheeseTopping(pizza);
        ExtraCheeseTopping someMoreCheese = new ExtraCheeseTopping(moreCheese);
        Console.WriteLine("Plain Margherita with double extra cheese: "   someMoreCheese.GetPrice().ToString());

        MushroomTopping moreMushroom = new MushroomTopping(someMoreCheese);
        Console.WriteLine("Plain Margherita with double extra cheese with mushroom: "   moreMushroom.GetPrice().ToString());

        JalapenoTopping moreJalapeno = new JalapenoTopping(moreMushroom);
        Console.WriteLine("Plain Margherita with double extra cheese with mushroom with Jalapeno: "   moreJalapeno.GetPrice().ToString());

        Console.ReadLine();
    }
}

public class Margherita : BasePizza
{
    public Margherita()
    {
        this.myPrice = 6.99;
    }
}

public class Gourmet : BasePizza
{
    public Gourmet()
    {
        this.myPrice = 7.49;
    }
}

public class ExtraCheeseTopping : ToppingsDecorator
{
    public ExtraCheeseTopping(BasePizza pizzaToDecorate)
        : base(pizzaToDecorate)
    {
        this.myPrice = 0.99;
    }
}

public class MushroomTopping : ToppingsDecorator
{
    public MushroomTopping(BasePizza pizzaToDecorate)
        : base(pizzaToDecorate)
    {
        this.myPrice = 1.49;
    }
}

public class JalapenoTopping : ToppingsDecorator
{
    public JalapenoTopping(BasePizza pizzaToDecorate)
        : base(pizzaToDecorate)
    {
        this.myPrice = 1.49;
    }
}

alt text

EDİT2

bu blog benim üzerine gönderildihere.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MarinaHD2001

    MarinaHD2001

    7 ŞUBAT 2009
  • schmittastic

    schmittastic

    9 EYLÜL 2009
  • stokelycalm

    stokelycalm

    28 Aralık 2010