-
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