170 likes | 291 Views
This lecture explores the Decorator Pattern and the Open-Closed Principle (OCP), emphasizing that classes should be open for extension but closed for modification. The Decorator Pattern allows developers to add new functionality to existing classes without altering their structure. By subclassing and using strategies, developers can enhance behavior while ensuring the core functionality remains intact. The lecture provides practical examples, warnings about potential pitfalls, and strategies for maintaining clean and efficient code design.
E N D
CSC 313 – Advanced Programming Topics Lecture 10:Decorator Pattern
Open-Closed Principle Classes should be open for extension, but closed to modification • So, what does this mean?
Reality Check Classes should be open for extension… • Want to update other’s code • Other is important emphasis • Everyone is other to someone • Easily create subclasses to: • Add functionality • Includeadditional fields • Specialize behavior via overriding
More Reality Check …But closed to modification
More Reality Check …But closed to modification • Nobody better mess with your code • YOUR code being beauty incarnate usually • Only add errors & will soil your perfection • Never let anyone: • Make changes which violate basic assumptions • Alter tasks it performs perfectly already • Anything that might introduce bugs
Strategy Pattern & OCP • Pattern stays true to open-closed principle • Using pattern, context open for extension • New functionality created by changing strategy • If more data is needed, subclasses can add fields • Context closed to modification despite all this • Actions limited by data provided to strategies • Strategies focused on task & cannot do other acts
Observer Pattern & OCP • Observer pattern devotee of principle, too • Using this pattern, subject open for extension • Responding to events open to each Observer • In pull model, extend Subject to make more info • Cannot modify Subject using this pattern • Limits of pattern means Observers only re-act • Subject chooses events to expose to Observers
Warning Remainder of lecture unsafe for: Beginning programmers Unwilling to consider new viewpoints Stubbornly dogmatic Stupid Liberal arts majors
Making a Cultured Pearl • Pearl made when piece of shell enters oyster • Irritant required to start making of pearl • To avoid irritation, shell grown around it • Layer after layer of material added by the oyster • As it grows, each layer adds new affect • Color, shine, shape modified by every layer added • So each layer adds something, but always a pearl
Problem At Hand • Have single key main concept • Coffee • Paycheck • Pizza • Characters • But many ways to adjust and extend concept • Cream, sugar, soy, mocha, caffeine, whip, chains • Federal & State income tax, FICA, health insurance • Bacon, pineapple, ham, anchovies, mushrooms • Bold, italic, underline, color, small caps, error
Add Fields for properties • Add field for each possible property • Is double whip, decaf, soy water possible? • Multiple states need taxes; how to handle this? • Using fields is both hard & inefficient • Must modify class for each new property we need • Creates huge number of rarely used fields
Add Fields for properties • Add field for each possible property • Is double whip, decaf, soy water possible? • Multiple states need taxes; how to handle this? • Using fields is both hard & inefficient • Must modify class for each new property we need • Creates huge number of rarely used fields • Class open to everyone to play with & change • This very clear violation of open close principle
Create Subclasses • Define subclass for each possible situation • Need both MochaWhipCoffee & WhipMochaCoffee? • Every pizza topping combination must be written • Good news: this follows open-close principle • But code duplicated in many places • Who’ll modify classes to update New York tax rate? • Maintaining this code will be pain for someone
Decorator Pattern Intent • Add, but not destroy, existing class instances • Double whip, soy, decaf coffee is just coffee • Theseare still letters ‘t’, ‘h’, ‘e’, ‘s’, & ‘e’ • After taxes, my paycheck still (barely) paycheck • Add functionality using these additions • Wrapping around character changes its display • Add $5.00 to price for calling coffee “tall” • This pattern can also add information • Many attachments included with my e-mail
Decorator Pattern Usage • Flexibly add adjectives to main class’s noun • These decorations provide additional description • Not required to use each decoration in each case • Wrappings can be stacked in any order • Enhance class’s actions by adding adverbs • Use additional information to improve result • Include additional tasks that must be performed • Lets main instance be invisiblyaugmented
For Next Lecture • Lab #2 due before next lab • Asks you to implement the Strategy Pattern • Read rubric • Read pages 95 – 105 in the book • How do we implement the design pattern? • Can anyone actually use this? • What is the main point of this pattern?