1 / 18

Lecture 26: Adapter Pattern

Computer Science 313 – Advanced Programming Topics. Lecture 26: Adapter Pattern. Real-World Problems. Have one thing, but need something different Try & make it work despite not being correct But this often leads to problems. Outlets Around the World.

amish
Download Presentation

Lecture 26: Adapter Pattern

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Computer Science 313 – Advanced Programming Topics Lecture 26:Adapter Pattern

  2. Real-World Problems • Have one thing, but need something different • Try & make it work despite not being correct • But this often leads to problems

  3. Outlets Around the World • 2 standards for electric transmission • Japan & the Americas use 110 volt • 220 volts used by Europe, (rest of) Asia, & Africa • Variety of incompatible plugs defined by each

  4. Play With Electricity for Fun! • Do not want new appliance for each country • First thought: jam single plug into wall • Plug interface only difference between them

  5. Play With Electricity for Fun! • Do not want new appliance for each country • First thought: jam single plug into wall • Plug interface only difference between them

  6. Play With Electricity for Fun! • Do not want new appliance for each country • First thought: jam single plug into wall • Plug interface only difference between them • Generally speaking, this is not a good idea • Use plug adapter as an alternate approach • Plug then good to use in existing outlets now

  7. Adapter Pattern Workings • Like plug adapters, but used with existing code • Starts with some existing plug (instance) • Need it to match a preexisting outlet (interface) • Do not want big changes; functionality stays same • Change what is exposed by wrapping plug

  8. Adapter Pattern Intent • Makes existing class use client's interface • Otherwise compatible classes now work together • Work is invisible to client code • Goal of pattern is client code is not modified • No changes to functionality with this pattern • If we want real changes use Decorator pattern • Does not need to expose full functionality • Have not discussed what plug attached to!

  9. Adapter Pattern Example • Already wrote class sorting an array public interface Comparable<T> {public intcompareTo(T other); } public class QuickSort {static void <T extends Comparable<T>> sort(T[] array) { // Sorts this array} }

  10. Points on a Plane • Must sort, but Dimensions not Comparable • Rewrite QuickSortto use Dimensions • Dimensionclosed to modification & inheritance • Do not want to rerun tests on Dimension, anyway • Adapter does this without violating laziness principle • Two ways to do this with Adapter pattern • Hide object, via Object adapter using composition • Class adapter uses inheritance, but reuse limited

  11. Object Adapter class ComparableDimensionimplements Comparable<ComparableDimension> {private Dimension d; // Object being adaptedpublic ComparableDimension(Dimension newD) {d = newD;}public intcompareTo(ComparableDimension o) { Integer myArea = d.height * d.width; Integer oArea = o.d.height * o.d.width; return myArea.compareTo(oArea);} }

  12. Class Adapter class ComparableDimensionextends Dimensionimplements Comparable<ComparableDimension> {public ComparableDimension(int h, int w) {super(h, w);}public intcompareTo(ComparableDimension o) { Integer myArea = d.height * d.width; Integer oArea = o.d.height * o.d.width; return myArea.compareTo(oArea);} }

  13. How Example Works • ImplementingComparableDimension either way • Is-a or Has-a Dimensionto compare • Comparableinterface is implemented • Can be used by QuickSortclass

  14. Class Adapter UML Diagram • Adapterextends Target & is-aAdaptee • Not very easy in Java • Client, Target & Adapteealready exist • Only Adapter created or edited to do this

  15. Class Adapter UML Diagram • Adapterextends Target & is-aAdaptee • Not very easy in Java (or most sane languages) • Client, Target & Adapteealready exist • Only Adapter created or edited to do this

  16. Object Adapter UML Diagram • Adapterextends Target & has-aAdaptee • No multiple inheritance, so legal in Java • Client, Target & Adapteealready exist • Only Adapter created or edited to do this

  17. Object Adapter UML Diagram • Adapterextends Target & has-aAdaptee • No multiple inheritance, so legal in Java • Client, Target & Adapteealready exist • Only Adapter created or edited to do this

  18. For Next Class • Lab #5 due on Friday before next lab starts • Get it working while you can still earn credit • Will discuss Façade pattern on Wednesday • How does this differ from Adapter? • What is important when discussing patterns? • What is the most “Hollywood” of patterns?

More Related