Strategy Pattern
public class FlyWithWings : IFlyBehavior {
public void y() {
[Link](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() {
[Link](Im ying with a rocket!);
}
}
public IFlyBehavior yBehavior;
public void swim() {
[Link](All duck oat, even decoys.);
}
public abstract void display();
public void performFly() {
yBehavior.y();
}
performFly()
public class FlyNoWay : IFlyBehavior {
public void y() {
[Link](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();
}
[Link]();
[Link]();
[Link](new FlyRocketPowered());
[Link]();
public override void display() {
[Link](Im a Mallard duck.);
}
public override void display() {
[Link](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)
{
[Link](o);
}
public void removeObserver(IObserver o)
{
int i = [Link](o);
if (i >= 0)
{
[Link](i);
}
}
public void notifyObservers()
{
for (int i = 0; i < [Link](); i++)
{
IObserver observer = (IObserver)observers[i];
[Link](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)
{
[Link] = weatherData;
[Link](this);
}
public void update(oat temperature, oat humidity, oat pressure)
{
[Link] = temperature;
[Link] = humidity;
[Link] = pressure;
display();
}
public oat getTemperature()
{
return temperature;
}
public oat getHumidity()
{
return humidity;
}
Main
subject
public void setMeasurements(oat temperature, oat humidity, oat pressure)
{
[Link] = temperature;
[Link] = humidity;
[Link] = pressure;
measurementsChanged();
}
public oat getPressure()
{
return pressure;
}
public interface IDisplayElement
{
void display();
}
public void display()
{
[Link]("Current conditions: " + temperature
+ " F degrees, Humidity : " + humidity
+ " % and Pressure: " + pressure + " P.");
}
}
[Link](80, 65, 30.4f);
[Link](82, 70, 29.2f);
[Link](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.