Presentation is loading. Please wait.

Presentation is loading. Please wait.

Template method. PBA WEB – BEWP 2 How to make a pizza If you order a pizza, the manufacturing of a pizza goes through certain steps We can write up a.

Similar presentations


Presentation on theme: "Template method. PBA WEB – BEWP 2 How to make a pizza If you order a pizza, the manufacturing of a pizza goes through certain steps We can write up a."— Presentation transcript:

1 Template method

2 PBA WEB – BEWP 2 How to make a pizza If you order a pizza, the manufacturing of a pizza goes through certain steps We can write up a sort of algorithm for making a pizza

3 PBA WEB – BEWP 3 How to make a pizza // From a class Pizza MakePizza() { CreateDough(); RolloutDough(); if (MustAddTomatoSauce()) AddTomatoSauce(); AddToppings(); if (MustAddCheese()) AddCheese(); Bake(); Cut(); PutInBox(); }

4 PBA WEB – BEWP 4 How to make a pizza This method for creating a pizza is generic; we always follow this algorithm However, not all of the individual steps are generic; they vary with the actual product We can categorise the methods, according to their ”level of generic-ness”

5 PBA WEB – BEWP 5 How to make a pizza MakePizza() { CreateDough(); RolloutDough(); if (MustAddTomatoSauce()) AddTomatoSauce(); AddToppings(); if (MustAddCheese()) AddCheese(); Bake(); Cut(); PutInBox(); } Is a fully generic method for making a pizza

6 PBA WEB – BEWP 6 How to make a pizza MakePizza() { CreateDough(); RolloutDough(); if (MustAddTomatoSauce()) AddTomatoSauce(); AddToppings(); if (MustAddCheese()) AddCheese(); Bake(); Cut(); PutInBox(); } The red steps are fully generic – they never vary

7 PBA WEB – BEWP 7 How to make a pizza MakePizza() { CreateDough(); RolloutDough(); if (MustAddTomatoSauce()) AddTomatoSauce(); AddToppings(); if (MustAddCheese()) AddCheese(); Bake(); Cut(); PutInBox(); } The green steps may vary, but have a default behavior

8 PBA WEB – BEWP 8 How to make a pizza MakePizza() { CreateDough(); RolloutDough(); if (MustAddTomatoSauce()) AddTomatoSauce(); AddToppings(); if (MustAddCheese()) AddCheese(); Bake(); Cut(); PutInBox(); } The brown step will vary, and has no default behavior

9 PBA WEB – BEWP 9 Method categorisation Method TypeDefinitionOverride Template Method Defines generic skeleton for algorithm No Concrete Operation Generic algorithm step No HookDefault – but overridable – algorithm step May Primitive Operation Specialised algorithm step Must

10 PBA WEB – BEWP 10 Specialised pizza How can we then make a specific pizza? We can let a subclass – e.g HawaiiPizza- NoCheese specialise the Pizza class What should this class implement..? Non-generic steps, i.e –Hooks –Primitive Operations

11 PBA WEB – BEWP 11 Specialised pizza public class HawaiiPizzaNoCheese : Pizza { // Hook (overrides default behavior) public override bool MustAddCheese() { return false;} public override void AddToppings() // Primitive operation { AddPineAppleSlices(); AddShrimps(); AddShreddedHam(); }

12 PBA WEB – BEWP 12 Template method pattern AbstractClass TemplateMethod() … PrimitiveOpA() PrimitiveOpB() PrimitiveOpC() Notice this is not an interface! ConcreteClass PrimitiveOpA() PrimitiveOpB() PrimitiveOpC() TemplateMethod() is never overwritten!

13 PBA WEB – BEWP 13 Template method pattern Pizza myPizza = new CopenhagenSpecialPizza();... myPizza.MakePizza(); // Notice that Pizza myPizza = new Pizza() // will fail!

14 PBA WEB – BEWP 14 Template method pattern What have we achieved? –Program to an interface, not an implementation Clients will only know the AbstractClass interface –Encapsulate the aspects that vary Specialised algorithm steps are located in the specialised classes

15 PBA WEB – BEWP 15 Template method pattern What have we achieved? –Open for extension, closed for modification We can add new specialisations without modification of base –Don’t call us, we’ll call you Base class calls specialised steps, not vice versa The last principle is called the Hollywood Agent principle

16 PBA WEB – BEWP 16 Template method pattern Base MakePizza Spec. AddToppings() Base Spec. MakePizza CreateDough() Don’t call us, we’ll call you - High-level classes are in control - Low-level classes can be hooked onto a system - Low-level classes don’t call high-level classes directly


Download ppt "Template method. PBA WEB – BEWP 2 How to make a pizza If you order a pizza, the manufacturing of a pizza goes through certain steps We can write up a."

Similar presentations


Ads by Google