September 2008 - Posts

Head First Design Pattern :Decorator

 This is C# code for Decorator. For more info see into book...

 

//Base abstract class
using System;
namespace Decorator
{
    /// <summary>
    /// Base class for Beverage. It represents the Component
    /// </summary>
    public abstract class Beverage
    {
        string _Description;

        public string Description
        {
            get { return _Description; }
            set { _Description = value; }
        }

        public abstract double CalculateCost();
    }
}

//Concrete class
using System;
using System.Collections.Generic;
using System.Text;

namespace Decorator
{
    /// <summary>
    /// Concrete class for Component
    /// </summary>
    public class Coffee : Decorator.Beverage
    {
        
        public override double  CalculateCost()
        {
            return 1;
        }
    }
}

//Base abstract class for decorator
using System;
using System.Collections.Generic;
using System.Text;

namespace Decorator
{
    /// <summary>
    /// Class for Decorator
    /// </summary>
    public abstract class CondimentDecorator : Decorator.Beverage
    {
        public abstract string Description
        {
            get;
            set;
        }
    }
}

//Decorator concrete class
using System;
using System.Collections.Generic;
using System.Text;

namespace Decorator
{
    /// <summary>
    /// Concrete decorator
    /// </summary>
    public class Mocha : Decorator.CondimentDecorator
    {
        Beverage bev;

        public Mocha(Beverage b)
        {
            this.bev = b;
        }

        public override double CalculateCost()
        {
            return this.bev.CalculateCost() +0.20;
        }

        public override string Description
        {
            get
            {
                return "Mocha";
            }
            set
            {
                throw new Exception("The method or operation is not implemented.");
            }
        }
    }
}

Bye
Antonio
Head First Design Patterns: Observer Pattern

I am reading this book and it is very useful for repeat GOF Design Patterns. But I found that source code is Java. But we prefer C# :P...

So I will implement all main patterns in C#...

I post here code about Observer:

 

//Subject
using System;
using System.Collections.Generic;
using System.Text;

namespace Observer
{
    public interface ISubject
    {
        void RegisterObserver(IObserver o);
        void RemoveObserver(IObserver o);
        void NotifyObservers();
    }
}

using System;
using System.Collections.Generic;
using System.Text;

namespace Observer
{
    public interface IObserver
    {
        void Update(double temp, double humidity, double preasure);
    }
}

using System;
using System.Collections.Generic;
using System.Text;

namespace Observer
{
    public interface IDisplay
    {
        void Dispay();
    }
}

//Subject Code
using System;
using System.Collections.Generic;
using System.Text;

namespace Observer
{
    public class WeatherData : ISubject
    {
        double _humidity;

        public double Humidity
        {
            get { return _humidity; }
            set { _humidity = value; }
        }
        double _preassure;

        public double Preassure
        {
            get { return _preassure; }
            set { _preassure = value; }
        }
        double _temperature;

        public double Temperature
        {
            get { return _temperature; }
            set { _temperature = value; }
        }

        /// <summary>
        /// Observers
        /// </summary>
        System.Collections.Generic.IList<IObserver> objs = new System.Collections.Generic.List<IObserver>();
        #region ISubject Members

        public void RegisterObserver(IObserver o)
        {
            objs.Add(o);
        }

        public void RemoveObserver(IObserver o)
        {
            objs.Remove(o);
        }

        public void NotifyObservers()
        {
            foreach (IObserver obj in objs)
                obj.Update(this._temperature, this._humidity, this._preassure);
        }

        #endregion
    }
}

//Observer code
using System;
using System.Collections.Generic;
using System.Text;

namespace Observer
{
    public class CurrentDispaly : IObserver,IDisplay
    {
        double _humidity;
        double _preassure;
        double _temperature;
        ISubject subject;

        public CurrentDispaly(ISubject sub)
        {
            //Istanzia l'oggetto e lo aggiunge come Observer
            subject = sub;
            subject.RegisterObserver(this);
        }
        #region IObserver Members

        public void Update(double temp, double humidity, double preasure)
        {
            this._temperature = temp;
            this._preassure = preasure;
            this._humidity = humidity;
            this.Dispay();
        }

        #endregion

        #region IDisplay Members

        public void Dispay()
        {
            System.Console.WriteLine(this._humidity + " " + this._preassure + " " + this._temperature);
        }

        #endregion
    }
}

Bye
Antonio

This site

Search

Go

This Blog

Syndication

Sponsors

  • MaximumASP
  • Breaking News
  • Find a Job
  • Social Bookmarking
    Tidebuy Reviews
    Online Shopping
    asp.net hosting
    UK online local dating