Sei sulla pagina 1di 2

Strategy Pattern

public class FlyWithWings : IFlyBehavior {


public void y() {
Console.Writeline(Im ying!);
}
}

public interface IFlyBehavior {


void y();
}

FlyWithWings

IFlyBehavior

y()

y()

FlyRocketPowered

public abstract class Duck {

Duck

public Duck {}

IFlyBehavior yBehavior

public void setFlyBehavior(IFlyBehavior fb) {


yBehavior = fb;
}

setFlyBehavior()
swim()
display()

FlyNoWay

y()

y()

public class FlyRocketPowered : IFlyBehavior {


public void y() {
Console.Writeline(Im ying with a rocket!);
}
}

public IFlyBehavior yBehavior;

public void swim() {


Console.Writeline(All duck oat, even decoys.);
}
public abstract void display();
public void performFly() {
yBehavior.y();
}

performFly()

public class FlyNoWay : IFlyBehavior {


public void y() {
Console.Writeline(I cant y!);
}
}

Main

MallardDuck

RubberDuck

display()

display()

class Program {
static void main(string[] args) {

public class MallardDuck : Duck {

public class RubberDuck : Duck {

MallardDuck mallard = new MallarDuck();


RubberDuck rubberDuckie = new RubberDuck();

public MallardDuck() {
yBehavior = new FlyWithWings();
}

public RubberDuck() {
yBehavior = new FlyNoWay();
}

mallard.performFly();
rubberDuckie.performFly();
rubberDuckie.setFlyBehavir(new FlyRocketPowered());
rubberDuckie.performFly();

public override void display() {


Console.Writeline(Im a Mallard duck.);
}

public override void display() {


Console.Writeline(Im a rubber duckie.);
}

}
}

Output
Im ying!
I cant y!
Im ying with a rocket!

public class WeatherData : ISubject


{
private List<IObserver> observers;
private oat temperature;
private oat humidity;
private oat pressure;
public WeatherData()
{
observers = new List<IObserver>();
}
public void registerObserver(IObserver o)
{
observers.Add(o);
}
public void removeObserver(IObserver o)
{
int i = observers.IndexOf(o);
if (i >= 0)
{
observers.RemoveAt(i);
}
}

public void notifyObservers()


{
for (int i = 0; i < observers.Count(); i++)
{
IObserver observer = (IObserver)observers[i];
observer.update(temperature, humidity, pressure);
}
}
public void measurementsChanged()
{
notifyObservers();
}

Observer Pattern

public interface ISubject


{
void registerObserver(IObserver o);
void removeObserver(IObserver o);
void notifyObservers();
}

public interface IObserver


{
void update(oat temperature, oat humidity, oat pressure);
}
observers

Subject

Observer

DisplayElement

registerObserver()
removeObserver()
notifyObservers()

update()

display()

WeatherData

CurrentConditionsDisplay

registerObserver()
removeObserver()
notifyObservers()
getTemperature()
getHumidity()
getPressure()

update()
display()

class Program
{
static void Main(string[] args)
{
WeatherData weatherData = new WeatherData();
CurrentConditionsDisplay currentDisplay
= new CurrentConditionsDisplay(weatherData);

class CurrentConditionsDisplay : IObserver, IDisplayElement


{
private oat temperature;
private oat humidity;
private oat pressure;
private ISubject weatherData;
public CurrentConditionsDisplay(ISubject weatherData)
{
this.weatherData = weatherData;
weatherData.registerObserver(this);
}
public void update(oat temperature, oat humidity, oat pressure)
{
this.temperature = temperature;
this.humidity = humidity;
this.pressure = pressure;
display();
}

public oat getTemperature()


{
return temperature;
}
public oat getHumidity()
{
return humidity;
}

Main

subject

public void setMeasurements(oat temperature, oat humidity, oat pressure)


{
this.temperature = temperature;
this.humidity = humidity;
this.pressure = pressure;
measurementsChanged();
}

public oat getPressure()


{
return pressure;
}

public interface IDisplayElement


{
void display();
}

public void display()


{
Console.WriteLine("Current conditions: " + temperature
+ " F degrees, Humidity : " + humidity
+ " % and Pressure: " + pressure + " P.");
}
}

weatherData.setMeasurements(80, 65, 30.4f);


weatherData.setMeasurements(82, 70, 29.2f);
weatherData.setMeasurements(78, 90, 27.7f);
}
}

Output
Current conditions: 80 F degrees,
Humidity : 65 % and
Pressure: 30,4 P.
Current conditions: 82 F degrees,
Humidity : 70 % and
Pressure: 29,2 P.
Current conditions: 78 F degrees,
Humidity : 90 % and
Pressure: 27,7 P.

Potrebbero piacerti anche