YOMEDIA
ADSENSE
Một số bài tập về Design Patterns
446
lượt xem 92
download
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ế đó.
AMBIENT/
Chủ đề:
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Một số bài tập về Design Patterns
- 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
- 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
- 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
- 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
- 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
- { 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
- 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
- { 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
- { 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
- 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(">"); } 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. 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
- } } #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(">"); 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. Chương trình 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 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
- } 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
Thêm tài liệu vào bộ sưu tập có sẵn:
Báo xấu
LAVA
AANETWORK
TRỢ GIÚP
HỖ TRỢ KHÁCH HÀNG
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn