0% found this document useful (0 votes)
48 views2 pages

Strategy Pattern: Iflybehavior

This document describes the strategy pattern and observer pattern. The strategy pattern allows behaviors to be defined independently and attached to classes through composition. Classes like Duck can have different fly behaviors set by implementing the IFlyBehavior interface. The observer pattern defines a subscription mechanism to notify multiple observers like CurrentConditionsDisplay of any changes to a subject like WeatherData. It allows loose coupling between subjects and observers by having observers register with subjects.

Uploaded by

pseudocod
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
48 views2 pages

Strategy Pattern: Iflybehavior

This document describes the strategy pattern and observer pattern. The strategy pattern allows behaviors to be defined independently and attached to classes through composition. Classes like Duck can have different fly behaviors set by implementing the IFlyBehavior interface. The observer pattern defines a subscription mechanism to notify multiple observers like CurrentConditionsDisplay of any changes to a subject like WeatherData. It allows loose coupling between subjects and observers by having observers register with subjects.

Uploaded by

pseudocod
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 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.

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy