Professional Documents
Culture Documents
Bai Tap Design Pattern 033
Bai Tap Design Pattern 033
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}
+ 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
Pizza dough: string name: string sauce: string toppings: ArrayList = new ArrayList() Bake() : void Box() : void Cut() : void Prepare() : void ToString() : string
NYStyleVeggiePizza + NYStyleVeggiePizza()
NYStylePepperoniPizza + NYStylePepperoniPizza()
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
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) -
MenuItem description: String name: String price: double vegetarian: bool -menuItems -
+ MenuItem(String, String, bool, double) property + Description() : string + Name() : string + Price() : double + Vegetarion() : bool
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
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
= = = =
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()
= = = = =
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
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:
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(); = = = =
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.
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(); = = = =
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