intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Một số bài tập về Design Patterns

Chia sẻ: Gacon | Ngày: | Loại File: DOC | Số trang:33

446
lượt xem
92
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Với mỗi lược đồ lớp dưới đây, hãy cho biết mẫu thiết kế nào được áp dụng và nêu vai trò của mỗi lớp dựa trên cấu trúc của mẫu thiết kế đó.

Chủ đề:
Lưu

Nội dung Text: Một số bài tập về Design Patterns

  1. BÀI TẬP Môn TKPMHDT --- Một số bài tập về Design Patterns 1. Với mỗi lược đồ lớp dưới đây, hãy cho biết mẫu thi ết k ế nào đ ược áp d ụng và nêu vai trò của mỗi lớp dựa trên cấu trúc của mẫu thiết kế đó. a. Lược đồ 1: class Class Diagram 1 ActionListener buttonHandler «interface» + actionPerformed(ActionEvent) : void CommandInterface + processEvent() : void JFrame FTPGUI - btnDelete: DeleteButton - btnDow nload: Dow nloadButton - btnUpload: UploadButton - defLocalList: DefaultListModel - defRemoteList: DefaultListModel JButton + DELETE: String = "Delete" {readOnly} UploadButton + DOWNLOAD: String = "Dow nload" {readOnly} -btnUpload + EXIT: String = "Exit" {readOnly} + processEvent() : void - localList: JList + UploadButton(String) + new line: String = "\n" {readOnly} - pnlFTPUI: JPanel - r emoteList: JList + UPLOAD: String = "Upload" {readOnly} + FTPGUI() - initialize() : void + main(String[]) : void -btnDelete -btnDow nload JButton JButton JButton DeleteButton ExitButton Dow nloadButton + DeleteButton(String) + ExitButton(String) + Dow nloadButton(String) + processEvent() : void + processEvent() : void + processEvent() : void Page |1
  2. b. Lược đồ 2: class Class Diagram 2 PizzaTestDrive Pizza DependentPizzaStore ChicagoStyleVeggiePizza - dough: string - Main(string[]) : void + CreatePizza(string, string) : Pizza + ChicagoStyleVeggiePizza() - name: string + Cut() : void - s auce: string - toppings: ArrayList = new ArrayList() PizzaStore + Bake() : void + Box() : void ChicagoStylePepperoniPizza + CreatePizza(string) : Pizza + Cut() : void + OrderPizza(String) : Pizza + Prepare() : void + ChicagoStylePepperoniPizza() + ToString() : string + Cut() : void «property» + Dough() : string + Name() : string ChicagoPizzaStore NYPizzaStore ChicagoStyleClamPizza + Sauce() : string + Toppings() : ArrayList + CreatePizza(String) : Pizza + CreatePizza(String) : Pizza + ChicagoStyleClamPizza() + Cut() : void ChicagoStyleCheesePizza + ChicagoStyleCheesePizza() + Cut() : void NYStyleVeggiePizza NYStylePepperoniPizza NYStyleClam Pizza NYStyleCheesePizza + NYStyleVeggiePizza() + NYStylePepperoniPizza() + NYStyleClamPizza() + NYStyleCheesePizza() c. Lược đồ 3: class Class Diagram 3 PizzaTestDrive - Main(string[]) : void Pizza - dough: string - name: string PizzaStore - s auce: string - f actory: SimplePizzaFactory - toppings: ArrayList = new ArrayList() + OrderPizza(string) : Pizza + Bake() : void + PizzaStore(SimplePizzaFactory) + Box() : void + Cut() : void + Pizza(string, string, string) + Prepare() : void + ToString() : string «property» -factory + Name() : string + Toppings() : ArrayList Sim plePizzaFactory + CreatePizza(string) : Pizza PepperoniPizza ClamPizza CheesePizza VeggiePizza + PepperoniPizza() + ClamPizza() + CheesePizza() + V eggiePizza() Page |2
  3. d. Lược đồ 4: class Class Diagram 4 MenuTestDrive «interface» CafeMenu IM enu - menuItems: Hashtable = new Hashtable() - Main(string[]) : void -pancakeHouseMenu + CreateIterator() : IEnumerator + A ddItem(String, String, bool, double) : void -cafeMenu + CafeMenu() -dinerMenu + CreateIterator() : IEnumerator Waitress - c afeMenu: IMenu - dinerMenu: IMenu - pancakeHouseMenu: IMenu PancakeHouseMenu + IsItemVegetarian(string) : bool - menuItems: ArrayList - IsVegetarian(string, IEnumerator) : bool + PrintMenu() : void + A ddItem(string, string, bool, double) : void - PrintMenu(IEnumerator) : void + CreateIterator() : IEnumerator + PrintVegetarianMenu() : void + PancakeHouseMenu() - PrintVegetarianMenu(IEnumerator) : void + Waitress(IMenu, IMenu, IMenu) MenuItem DinerMenu - description: String - MAX_ITEMS: int = 6 {readOnly} - name: String -menuItems - menuItems: MenuItem ([]) - price: double - numberOfItems: int = 0 - v egetarian: bool + A ddItem(String, String, bool, double) : void + MenuItem(String, String, bool, double) + CreateIterator() : IEnumerator + DinerMenu() «property» + Description() : string + Name() : string + Price() : double + V egetarion() : bool Page |3
  4. e. Lược đồ 5: class Class Diagram 5 DuckSim ulator GooseAdapter QuackCounter Goose - Main(string[]) : void -goose - goose: Goose «interface» - duck: IQuackable - Simulate(AbstractDuckFactory) : void + Honk() : void IQuackable - numberOfQuacks: int - Simulate(IQuackable) : void + GooseAdapter(Goose) + ToString() : string -duck + Q uack() : void + Quack() : void + Quack() : void + ToString() : string + QuackCounter(IQuackable) AbstractDuckFactory + ToString() : string + CreateDuckCall() : IQuackable «property» + CreateMallardDuck() : IQuackable + Quacks() : int + CreateRedheadDuck() : IQuackable Flock + CreateRubberDuck() : IQuackable - quackers: ArrayList = new ArrayList() + A dd(IQuackable) : void CountingDuckFactory DuckFactory + Quack() : void + ToString() : string + CreateDuckCall() : IQuackable + CreateDuckCall() : IQuackable + CreateMallardDuck() : IQuackable + CreateMallardDuck() : IQuackable + CreateRedheadDuck() : IQuackable + CreateRedheadDuck() : IQuackable + CreateRubberDuck() : IQuackable + CreateRubberDuck() : IQuackable RubberDuck DecoyDuck MallardDuck RedheadDuck DuckCall + Quack() : void + Quack() : void + Quack() : void + Quack() : void + Quack() : void + ToString() : string + ToString() : string + ToString() : string + ToString() : string + ToString() : string Page |4
  5. 2. Với mỗi đoạn code dưới đây, hãy cho biết mẫu thiết kế nào đ ược áp d ụng và nêu vai trò của từng lớp dựa trên cấu trúc của mẫu thiết kế đó. Lưu ý: hạn chế dùng EA để phát sinh sơ đồ lớp. Chỉ nên s ử d ụng đ ể ki ểm tra l ại k ết quả mà thôi. a. Chương trình 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 mallardDuck = new MallardDuck(); IQuackable redheadDuck = new RedheadDuck(); IQuackable duckCall = new DuckCall(); IQuackable rubberDuck = new 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
  6. { 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(">"); } } #endregion } Page |6
  7. b. Chương trình 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 mallardDuck = new MallardDuck(); IQuackable redheadDuck = new RedheadDuck(); IQuackable duckCall = new DuckCall(); IQuackable rubberDuck = new RubberDuck(); IQuackable gooseDuck = new GooseAdapter(new 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
  8. { Console.WriteLine(">"); } } 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
  9. { goose.Honk(); } public override string ToString() { return "Goose pretending to be a Duck"; } } public class Goose { public void Honk() { Console.WriteLine("Honk"); } } #endregion } c. Chương trình 3: using System; namespace Ducks3 { class DuckSimulator { static void Main(string[] args) { DuckSimulator simulator = new DuckSimulator(); simulator.Simulate(); } void Simulate() { IQuackable mallardDuck = new QuackCounter(new MallardDuck()); IQuackable redheadDuck = new QuackCounter(new RedheadDuck()); IQuackable duckCall = new QuackCounter(new DuckCall()); IQuackable rubberDuck = new QuackCounter(new RubberDuck()); IQuackable gooseDuck = new GooseAdapter(new Goose()); Console.WriteLine("Duck Simulator: With Decorator"); Simulate(mallardDuck); Page |9
  10. 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
  11. } 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(">"); } 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
  12. { 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
  13. #endregion } d. Chương trình 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
  14. } } #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
  15. 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
  16. { 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(">"); P a g e | 16
  17. } 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. Chương trình 5: using System; using System.Collections; P a g e | 17
  18. 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
  19. 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 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(); } P a g e | 19
  20. } 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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2