You are on page 1of 33

BI TP Mn TKPMHDT --Mt s bi tp v Design Patterns

ca mi lp da trn cu trc ca mu thit k . a. Lc 1:


class Class Diagram 1 ActionListener buttonHandler + actionPerformed(ActionEvent) : void

1. Vi mi lc lp di y, hy cho bit mu thi t k no c p d ng v nu vai tr

interface CommandInterface JFrame + processEvent() : void

FTPGUI + + + + + btnDelete: DeleteButton btnDow nload: Dow nloadButton btnUpload: UploadButton defLocalList: DefaultListModel defRemoteList: DefaultListModel DELETE: String = "Delete" {readOnly} DOWNLOAD: String = "Dow nload" {readOnly} EXIT: String = "Exit" {readOnly} localList: JList new line: String = "\n" {readOnly} pnlFTPUI: JPanel remoteList: JList UPLOAD: String = "Upload" {readOnly}

JButton -btnUpload UploadButton + processEvent() : void + UploadButton(String)

+ FTPGUI() - initialize() : void + main(String[]) : void -btnDelete JButton ExitButton + ExitButton(String) + processEvent() : void JButton DeleteButton + DeleteButton(String) + processEvent() : void -btnDow nload JButton Dow nloadButton + Dow nloadButton(String) + processEvent() : void

Page |1

b. Lc 2:
class Class Diagram 2 PizzaTestDrive Main(string[]) : void

DependentPizzaStore + CreatePizza(string, string) : Pizza + + + + +

Pizza dough: string name: string sauce: string toppings: ArrayList = new ArrayList() Bake() : void Box() : void Cut() : void Prepare() : void ToString() : string

ChicagoStyleVeggiePizza + ChicagoStyleVeggiePizza() + Cut() : void

PizzaStore + CreatePizza(string) : Pizza + OrderPizza(String) : Pizza

ChicagoStylePepperoniPizza + ChicagoStylePepperoniPizza() + Cut() : void

ChicagoPizzaStore + CreatePizza(String) : Pizza

NYPizzaStore + CreatePizza(String) : Pizza

property + Dough() : string + Name() : string + Sauce() : string + Toppings() : ArrayList

ChicagoStyleClamPizza + ChicagoStyleClamPizza() + Cut() : void

ChicagoStyleCheesePizza + ChicagoStyleCheesePizza() + Cut() : void

NYStyleVeggiePizza + NYStyleVeggiePizza()

NYStylePepperoniPizza + NYStylePepperoniPizza()

NYStyleClam Pizza + NYStyleClamPizza()

NYStyleCheesePizza + NYStyleCheesePizza()

c. Lc 3:
class Class Diagram 3 PizzaTestDrive Main(string[]) : void Pizza + + + + + + dough: string name: string sauce: string toppings: ArrayList = new ArrayList() Bake() : void Box() : void Cut() : void Pizza(string, string, string) Prepare() : void ToString() : string

PizzaStore factory: SimplePizzaFactory

+ OrderPizza(string) : Pizza + PizzaStore(SimplePizzaFactory)

-factory Sim plePizzaFactory + CreatePizza(string) : Pizza

property + Name() : string + Toppings() : ArrayList

PepperoniPizza + PepperoniPizza()

ClamPizza + ClamPizza()

VeggiePizza + VeggiePizza()

CheesePizza + CheesePizza()

Page |2

d. Lc 4:
class Class Diagram 4 MenuTestDrive Main(string[]) : void -pancakeHouseMenu -cafeMenu -dinerMenu Waitress + + + + cafeMenu: IMenu dinerMenu: IMenu pancakeHouseMenu: IMenu IsItemVegetarian(string) : bool IsVegetarian(string, IEnumerator) : bool PrintMenu() : void PrintMenu(IEnumerator) : void PrintVegetarianMenu() : void PrintVegetarianMenu(IEnumerator) : void Waitress(IMenu, IMenu, IMenu) -

interface IM enu + CreateIterator() : IEnumerator

CafeMenu menuItems: Hashtable = new Hashtable()

+ AddItem(String, String, bool, double) : void + CafeMenu() + CreateIterator() : IEnumerator

PancakeHouseMenu menuItems: ArrayList

+ AddItem(string, string, bool, double) : void + CreateIterator() : IEnumerator + PancakeHouseMenu()

MenuItem description: String name: String price: double vegetarian: bool -menuItems -

DinerMenu MAX_ITEMS: int = 6 {readOnly} menuItems: MenuItem ([]) numberOfItems: int = 0

+ MenuItem(String, String, bool, double) property + Description() : string + Name() : string + Price() : double + Vegetarion() : bool

+ AddItem(String, String, bool, double) : void + CreateIterator() : IEnumerator + DinerMenu()

Page |3

e. Lc 5:
class Class Diagram 5 DuckSim ulator Main(string[]) : void Simulate(AbstractDuckFactory) : void Simulate(IQuackable) : void QuackCounter duck: IQuackable numberOfQuacks: int interface IQuackable -duck + Quack() : void GooseAdapter goose: Goose -goose

Goose + Honk() : void + ToString() : string

AbstractDuckFactory + + + + CreateDuckCall() : IQuackable CreateMallardDuck() : IQuackable CreateRedheadDuck() : IQuackable CreateRubberDuck() : IQuackable

+ Quack() : void + QuackCounter(IQuackable) + ToString() : string property + Quacks() : int

+ GooseAdapter(Goose) + Quack() : void + ToString() : string

Flock quackers: ArrayList = new ArrayList()

DuckFactory + + + + CreateDuckCall() : IQuackable CreateMallardDuck() : IQuackable CreateRedheadDuck() : IQuackable CreateRubberDuck() : IQuackable + + + +

CountingDuckFactory CreateDuckCall() : IQuackable CreateMallardDuck() : IQuackable CreateRedheadDuck() : IQuackable CreateRubberDuck() : IQuackable

+ Add(IQuackable) : void + Quack() : void + ToString() : string

RedheadDuck + Quack() : void + ToString() : string

MallardDuck + Quack() : void + ToString() : string

DuckCall + Quack() : void + ToString() : string

RubberDuck + Quack() : void + ToString() : string

DecoyDuck + Quack() : void + ToString() : string

Page |4

2. Vi mi on code di y, hy cho bit mu thit k no c p d ng v nu vai tr ca tng lp da trn cu trc ca mu thit k . Lu : hn ch dng EA pht sinh s lp. Ch nn s d ng ki m tra l i k t qu m thi. a. Chng trnh 1: using System; namespace Ducks1 { class DuckSimulator { static void Main(string[] args) { DuckSimulator simulator = new DuckSimulator(); simulator.Simulate(); // Wait for user Console.Read(); } void Simulate() { IQuackable IQuackable IQuackable IQuackable

mallardDuck redheadDuck duckCall rubberDuck

= = = =

new new new new

MallardDuck(); RedheadDuck(); DuckCall(); RubberDuck();

Console.WriteLine("Duck Simulator"); Simulate(mallardDuck); Simulate(redheadDuck); Simulate(duckCall); Simulate(rubberDuck); } void Simulate(IQuackable duck) { duck.Quack(); } } #region Duck public interface IQuackable { void Quack(); } public class RubberDuck : IQuackable { public void Quack()

Page |5

{ Console.WriteLine("Squeak"); } } public class RedheadDuck : IQuackable { public void Quack() { Console.WriteLine("Quack"); } } public class MallardDuck : IQuackable { public void Quack() { Console.WriteLine("Quack"); } } public class DuckCall : IQuackable { public void Quack() { Console.WriteLine("Kwak"); } } public class DecoyDuck : IQuackable { public void Quack() { Console.WriteLine("<< Silence >>"); } } #endregion }

Page |6

b. Chng trnh 2:

using System; namespace Ducks2 { class DuckSimulator { static void Main(string[] args) { DuckSimulator simulator = new DuckSimulator(); simulator.Simulate(); // Wait for user Console.Read(); } void Simulate() { IQuackable IQuackable IQuackable IQuackable IQuackable Goose()); Console.WriteLine("Duck Simulator: With Goose Adapter"); Simulate(mallardDuck); Simulate(redheadDuck); Simulate(duckCall); Simulate(rubberDuck); Simulate(gooseDuck); } void Simulate(IQuackable duck) { duck.Quack(); } } #region Ducks public interface IQuackable { void Quack(); } public class DecoyDuck : IQuackable { public void Quack()

mallardDuck redheadDuck duckCall rubberDuck gooseDuck

= = = = =

new new new new new

MallardDuck(); RedheadDuck(); DuckCall(); RubberDuck(); GooseAdapter(new

Page |7

{ Console.WriteLine("<< Silence >>"); } } public class RedheadDuck : IQuackable { public void Quack() { Console.WriteLine("Quack"); } } public class MallardDuck : IQuackable { public void Quack() { Console.WriteLine("Quack"); } } public class RubberDuck : IQuackable { public void Quack() { Console.WriteLine("Squeak"); } } public class DuckCall : IQuackable { public void Quack() { Console.WriteLine("Kwak"); } } #endregion #region Goose public class GooseAdapter : IQuackable { Goose goose; // Constructor public GooseAdapter(Goose goose) { this.goose = goose; } public void Quack()

Page |8

{ goose.Honk(); } public override string ToString() { return "Goose pretending to be a Duck"; } } public class Goose { public void Honk() { Console.WriteLine("Honk"); } } #endregion }
c. Chng trnh 3:

using System; namespace Ducks3 { class DuckSimulator { static void Main(string[] args) { DuckSimulator simulator = new DuckSimulator(); simulator.Simulate(); } void Simulate() { IQuackable MallardDuck()); IQuackable RedheadDuck()); IQuackable DuckCall()); IQuackable RubberDuck()); IQuackable Goose()); Decorator"); Simulate(mallardDuck);

mallardDuck = new QuackCounter(new redheadDuck = new QuackCounter(new duckCall rubberDuck gooseDuck = new QuackCounter(new = new QuackCounter(new = new GooseAdapter(new

Console.WriteLine("Duck Simulator: With

Page |9

Simulate(redheadDuck); Simulate(duckCall); Simulate(rubberDuck); Simulate(gooseDuck); Console.WriteLine("The ducks quacked " + QuackCounter.Quacks + " times"); // Wait for user Console.Read(); } void Simulate(IQuackable duck) { duck.Quack(); } } #region Ducks public interface IQuackable { void Quack(); } public class RubberDuck : IQuackable { public void Quack() { Console.WriteLine("Squeak"); } public override string ToString() { return "Rubber Duck"; } } public class RedheadDuck : IQuackable { public void Quack() { Console.WriteLine("Quack"); } } public class MallardDuck : IQuackable { public void Quack() { Console.WriteLine("Quack");

P a g e | 10

} public override string ToString() { return "Mallard Duck"; } } public class DuckCall : IQuackable { public void Quack() { Console.WriteLine("Kwak"); } public override string ToString() { return "Duck Call"; } } public class DecoyDuck : IQuackable { public void Quack() { Console.WriteLine("<< Silence >>"); } public override string ToString() { return "Decoy Duck"; } } #endregion #region QuackCounter public class QuackCounter : IQuackable { IQuackable duck; static int numberOfQuacks; public QuackCounter(IQuackable duck) { this.duck = duck; } public void Quack()

P a g e | 11

{ duck.Quack(); numberOfQuacks++; } public static int Quacks { get{ return numberOfQuacks; } } public override string ToString() { return duck.ToString(); } } #endregion #region Goose public class GooseAdapter : IQuackable { Goose goose; public GooseAdapter(Goose goose) { this.goose = goose; } public void Quack() { goose.Honk(); } public override string ToString() { return "Goose pretending to be a Duck"; } } public class Goose { public void Honk() { Console.WriteLine("Honk"); } public override string ToString() { return "Goose"; } }

P a g e | 12

#endregion }
d. Chng trnh 4:

using System; namespace Ducks4 { class DuckSimulator { static void Main(string[] args) { DuckSimulator simulator = new DuckSimulator(); AbstractDuckFactory factory = new CountingDuckFactory(); simulator.Simulate(factory); // Wait for user Console.Read(); } void Simulate(AbstractDuckFactory factory) { IQuackable mallardDuck = factory.CreateMallardDuck(); IQuackable redheadDuck = factory.CreateRedheadDuck(); IQuackable duckCall = factory.CreateDuckCall(); IQuackable rubberDuck = factory.CreateRubberDuck(); IQuackable gooseDuck = new GooseAdapter(new Goose()); Console.WriteLine("Duck Simulator: With Abstract Factory"); Simulate(mallardDuck); Simulate(redheadDuck); Simulate(duckCall); Simulate(rubberDuck); Simulate(gooseDuck); Console.WriteLine("The ducks quacked " + QuackCounter.Quacks + " times"); } void Simulate(IQuackable duck) { duck.Quack();

P a g e | 13

} } #region Factory public abstract class AbstractDuckFactory { public abstract IQuackable CreateMallardDuck(); public abstract IQuackable CreateRedheadDuck(); public abstract IQuackable CreateDuckCall(); public abstract IQuackable CreateRubberDuck(); } public class DuckFactory : AbstractDuckFactory { public override IQuackable CreateMallardDuck() { return new MallardDuck(); } public override IQuackable CreateRedheadDuck() { return new RedheadDuck(); } public override IQuackable CreateDuckCall() { return new DuckCall(); } public override IQuackable CreateRubberDuck() { return new RubberDuck(); } } public class CountingDuckFactory : AbstractDuckFactory { public override IQuackable CreateMallardDuck() { return new QuackCounter(new MallardDuck()); } public override IQuackable CreateRedheadDuck() { return new QuackCounter(new RedheadDuck()); } public override IQuackable CreateDuckCall() {

P a g e | 14

return new QuackCounter(new DuckCall()); } public override IQuackable CreateRubberDuck() { return new QuackCounter(new RubberDuck()); } } #endregion #region Quack Counter public class QuackCounter : IQuackable { IQuackable duck; static int numberOfQuacks; public QuackCounter(IQuackable duck) { this.duck = duck; } public void Quack() { duck.Quack(); numberOfQuacks++; } public static int Quacks { get{ return numberOfQuacks; } } public override string ToString() { return duck.ToString(); } } #endregion #region Ducks public interface IQuackable { void Quack(); } public class RubberDuck : IQuackable { public void Quack()

P a g e | 15

{ Console.WriteLine("Squeak"); } public override string ToString() { return "Rubber Duck"; } } public class RedheadDuck : IQuackable { public void Quack() { Console.WriteLine("Quack"); } } public class MallardDuck : IQuackable { public void Quack() { Console.WriteLine("Quack"); } public override string ToString() { return "Mallard Duck"; } } public class DuckCall : IQuackable { public void Quack() { Console.WriteLine("Kwak"); } public override string ToString() { return "Duck Call"; } } public class DecoyDuck : IQuackable { public void Quack() { Console.WriteLine("<< Silence >>");

P a g e | 16

} public override string ToString() { return "Decoy Duck"; } } #endregion #region Goose public class GooseAdapter : IQuackable { Goose goose; public GooseAdapter(Goose goose) { this.goose = goose; } public void Quack() { goose.Honk(); } public override string ToString() { return "Goose pretending to be a Duck"; } } public class Goose { public void Honk() { Console.WriteLine("Honk"); } public override string ToString() { return "Goose"; } } #endregion }
e. Chng trnh 5:

using System; using System.Collections;

P a g e | 17

namespace Ducks5 { class DuckSimulator { static void Main(string[] args) { AbstractDuckFactory factory = new CountingDuckFactory(); DuckSimulator simulator = new DuckSimulator(); simulator.Simulate(factory); // Wait for user Console.Read(); } void Simulate(AbstractDuckFactory factory) { IQuackable redheadDuck = factory.CreateRedheadDuck(); IQuackable duckCall = factory.CreateDuckCall(); IQuackable rubberDuck = factory.CreateRubberDuck(); IQuackable gooseDuck = new GooseAdapter(new Goose()); Console.WriteLine("Duck Simulator: With Composite - Flocks"); Flock flockOfDucks = new Flock(); flockOfDucks.Add(redheadDuck); flockOfDucks.Add(duckCall); flockOfDucks.Add(rubberDuck); flockOfDucks.Add(gooseDuck); Flock flockOfMallards = new Flock(); IQuackable mallardOne factory.CreateMallardDuck(); IQuackable mallardTwo factory.CreateMallardDuck(); IQuackable mallardThree factory.CreateMallardDuck(); IQuackable mallardFour factory.CreateMallardDuck(); = = = =

flockOfMallards.Add(mallardOne); flockOfMallards.Add(mallardTwo); flockOfMallards.Add(mallardThree); flockOfMallards.Add(mallardFour);

P a g e | 18

flockOfDucks.Add(flockOfMallards); Console.WriteLine("\nDuck Simulator: Whole Flock Simulation"); Simulate(flockOfDucks); Console.WriteLine("\nDuck Simulator: Mallard Flock Simulation"); Simulate(flockOfMallards); Console.WriteLine("\nThe ducks quacked " + QuackCounter.Quacks + " times"); } void Simulate(IQuackable duck) { duck.Quack(); } } #region Factory public abstract class AbstractDuckFactory { public public public public } public class DuckFactory : AbstractDuckFactory { public override IQuackable CreateMallardDuck() { return new MallardDuck(); } public override IQuackable CreateRedheadDuck() { return new RedheadDuck(); } public override IQuackable CreateDuckCall() { return new DuckCall(); } public override IQuackable CreateRubberDuck() { return new RubberDuck(); } abstract abstract abstract abstract IQuackable IQuackable IQuackable IQuackable CreateMallardDuck(); CreateRedheadDuck(); CreateDuckCall(); CreateRubberDuck();

P a g e | 19

} public class CountingDuckFactory : AbstractDuckFactory { public override IQuackable CreateMallardDuck() { return new QuackCounter(new MallardDuck()); } public override IQuackable CreateRedheadDuck() { return new QuackCounter(new RedheadDuck()); } public override IQuackable CreateDuckCall() { return new QuackCounter(new DuckCall()); } public override IQuackable CreateRubberDuck() { return new QuackCounter(new RubberDuck()); } } #endregion #region Quack Counter public class QuackCounter : IQuackable { IQuackable duck; static int numberOfQuacks; public QuackCounter(IQuackable duck) { this.duck = duck; } public void Quack() { duck.Quack(); numberOfQuacks++; } public static int Quacks { get{ return numberOfQuacks; } }

P a g e | 20

public override string ToString() { return duck.ToString(); } } #endregion #region Ducks public interface IQuackable { void Quack(); }

public class RubberDuck : IQuackable { public void Quack() { Console.WriteLine("Squeak"); } public override string ToString() { return "Rubber Duck"; } } public class RedheadDuck : IQuackable { public void Quack() { Console.WriteLine("Quack"); } public override string ToString() { return "Redhead Duck"; } } public class MallardDuck : IQuackable { public void Quack() { Console.WriteLine("Quack"); }

P a g e | 21

public override string ToString() { return "Mallard Duck"; } } public class DuckCall : IQuackable { public void Quack() { Console.WriteLine("Kwak"); } public override string ToString() { return "Duck Call"; } } public class DecoyDuck : IQuackable { public void Quack() { Console.WriteLine("<< Silence >>"); } public override string ToString() { return "Decoy Duck"; } } #endregion #region Flock public class Flock : IQuackable { ArrayList quackers = new ArrayList(); public void Add(IQuackable quacker) { quackers.Add(quacker); } public void Quack() { foreach(IQuackable quacker in quackers) { quacker.Quack();

P a g e | 22

} } public override string ToString() { return "Flock of Quackers"; } } #endregion #region Goose public class GooseAdapter : IQuackable { Goose goose; public GooseAdapter(Goose goose) { this.goose = goose; } public void Quack() { goose.Honk(); } public override string ToString() { return "Goose pretending to be a Duck"; } } public class Goose { public void Honk() { Console.WriteLine("Honk"); } public override string ToString() { return "Goose"; } } #endregion }
f.

Chng trnh 6: using System; using System.Collections;

P a g e | 23

namespace DoFactory.HeadFirst.Combining.Observer { class DuckSimulator { static void Main(string[] args) { DuckSimulator simulator = new DuckSimulator(); AbstractDuckFactory factory = new CountingDuckFactory(); simulator.Simulate(factory); // Wait for user Console.Read(); } void Simulate(AbstractDuckFactory factory) { IQuackable redheadDuck = factory.CreateRedheadDuck(); IQuackable duckCall = factory.CreateDuckCall(); IQuackable rubberDuck = factory.CreateRubberDuck(); IQuackable gooseDuck = new GooseAdapter(new Goose()); Flock flockOfDucks = new Flock(); flockOfDucks.Add(redheadDuck); flockOfDucks.Add(duckCall); flockOfDucks.Add(rubberDuck); flockOfDucks.Add(gooseDuck); Flock flockOfMallards = new Flock(); IQuackable mallardOne factory.CreateMallardDuck(); IQuackable mallardTwo factory.CreateMallardDuck(); IQuackable mallardThree factory.CreateMallardDuck(); IQuackable mallardFour factory.CreateMallardDuck(); = = = =

flockOfMallards.Add(mallardOne); flockOfMallards.Add(mallardTwo); flockOfMallards.Add(mallardThree); flockOfMallards.Add(mallardFour); flockOfDucks.Add(flockOfMallards);

P a g e | 24

Console.WriteLine("Duck Simulator: With Observer"); Quackologist quackologist = new Quackologist(); flockOfDucks.RegisterObserver(quackologist); Simulate(flockOfDucks); Console.WriteLine("\nThe ducks quacked " + QuackCounter.Quacks + " times"); } void Simulate(IQuackable duck) { duck.Quack(); } } #region Factory public abstract class AbstractDuckFactory { public abstract IQuackable CreateMallardDuck(); public abstract IQuackable CreateRedheadDuck(); public abstract IQuackable CreateDuckCall(); public abstract IQuackable CreateRubberDuck(); } public class DuckFactory : AbstractDuckFactory { public override IQuackable CreateMallardDuck() { return new MallardDuck(); } public override IQuackable CreateRedheadDuck() { return new RedheadDuck(); } public override IQuackable CreateDuckCall() { return new DuckCall(); } public override IQuackable CreateRubberDuck() { return new RubberDuck(); } } public class CountingDuckFactory : AbstractDuckFactory

P a g e | 25

{ public override IQuackable CreateMallardDuck() { return new QuackCounter(new MallardDuck()); } public override IQuackable CreateRedheadDuck() { return new QuackCounter(new RedheadDuck()); } public override IQuackable CreateDuckCall() { return new QuackCounter(new DuckCall()); } public override IQuackable CreateRubberDuck() { return new QuackCounter(new RubberDuck()); } } #endregion #region Quack Counter public class QuackCounter : IQuackable { IQuackable duck; static int numberOfQuacks; public QuackCounter(IQuackable duck) { this.duck = duck; } public void Quack() { duck.Quack(); numberOfQuacks++; } public static int Quacks { get{ return numberOfQuacks; } } public void RegisterObserver(IObserver observer) { duck.RegisterObserver(observer); }

P a g e | 26

public void NotifyObservers() { duck.NotifyObservers(); } public override string ToString() { return duck.ToString(); } } #endregion #region Observer public interface IObserver { void Update(IQuackObservable duck); } public class Quackologist : IObserver { public void Update(IQuackObservable duck) { Console.WriteLine("Quackologist: " + duck + " just quacked."); } public override string ToString() { return "Quackologist"; } } public class Observable : IQuackObservable { ArrayList observers = new ArrayList(); IQuackObservable duck; public Observable(IQuackObservable duck) { this.duck = duck; } public void RegisterObserver(IObserver observer) { observers.Add(observer); } public void NotifyObservers() { foreach(IObserver observer in observers)

P a g e | 27

{ observer.Update(duck); } } } #endregion #region Flock public class Flock : IQuackable { ArrayList ducks = new ArrayList(); public void Add(IQuackable duck) { ducks.Add(duck); } public void Quack() { foreach(IQuackable duck in ducks) { duck.Quack(); } } public void RegisterObserver(IObserver observer) { foreach(IQuackable duck in ducks) { duck.RegisterObserver(observer); } } public void NotifyObservers() { } public override string ToString() { return "Flock of Ducks"; } } #endregion #region Ducks public interface IQuackObservable { void RegisterObserver(IObserver observer); void NotifyObservers(); }

P a g e | 28

public interface IQuackable : IQuackObservable { void Quack(); } public class RubberDuck : IQuackable { Observable observable; public RubberDuck() { observable = new Observable(this); } public void Quack() { Console.WriteLine("Squeak"); NotifyObservers(); } public void RegisterObserver(IObserver observer) { observable.RegisterObserver(observer); } public void NotifyObservers() { observable.NotifyObservers(); } public override string ToString() { return "Rubber Duck"; } } public class MallardDuck : IQuackable { Observable observable; public MallardDuck() { observable = new Observable(this); } public void Quack() { Console.WriteLine("Quack"); NotifyObservers(); }

P a g e | 29

public void RegisterObserver(IObserver observer) { observable.RegisterObserver(observer); } public void NotifyObservers() { observable.NotifyObservers(); } public override string ToString() { return "Mallard Duck"; } } public class RedheadDuck : IQuackable { Observable observable; public RedheadDuck() { observable = new Observable(this); } public void Quack() { Console.WriteLine("Quack"); NotifyObservers(); } public void RegisterObserver(IObserver observer) { observable.RegisterObserver(observer); } public void NotifyObservers() { observable.NotifyObservers(); } public override string ToString() { return "Redhead Duck"; } } public class DuckCall : IQuackable { Observable observable; public DuckCall() {

P a g e | 30

observable = new Observable(this); } public void Quack() { Console.WriteLine("Kwak"); NotifyObservers(); } public void RegisterObserver(IObserver observer) { observable.RegisterObserver(observer); } public void NotifyObservers() { observable.NotifyObservers(); } public override string ToString() { return "Duck Call"; } } public class DecoyDuck : IQuackable { Observable observable; public DecoyDuck() { observable = new Observable(this); } public void Quack() { Console.WriteLine("<< Silence >>"); NotifyObservers(); } public void RegisterObserver(IObserver observer) { observable.RegisterObserver(observer); } public void NotifyObservers() { observable.NotifyObservers(); } public override string ToString() {

P a g e | 31

return "Decoy Duck"; } } #endregion #region Goose public class Goose { public void Honk() { Console.WriteLine("Honk"); } public override string ToString() { return "Goose"; } } public class GooseAdapter : IQuackable { Goose goose; Observable observable; public GooseAdapter(Goose goose) { this.goose = goose; observable = new Observable(this); } public void Quack() { goose.Honk(); NotifyObservers(); } public void RegisterObserver(IObserver observer) { observable.RegisterObserver(observer); } public void NotifyObservers() { observable.NotifyObservers(); } public override string ToString() { return "Goose pretending to be a Duck";

P a g e | 32

} } #endregion } -HT-

P a g e | 33

You might also like