Presentation is loading. Please wait.

Presentation is loading. Please wait.

The Adapter Pattern SE-2811 Dr. Mark L. Hornick 1.

Similar presentations


Presentation on theme: "The Adapter Pattern SE-2811 Dr. Mark L. Hornick 1."— Presentation transcript:

1 The Adapter Pattern SE-2811 Dr. Mark L. Hornick 1

2 Scenario: An Existing System (your client code) interfaces to a Vendor Class library you purchased and incorporated into an application your company is currently selling Existing System Vendor1 Class The Vendor goes out of business; what do you do??? Vendor1 interface

3 The original configuration SE-2811 Dr. Mark L. Hornick 3 The ClientApp is written such that it is heavily dependent on the functionality implemented in ServiceProvider, and is loaded with calls to various ServiceProvider methods. ServiceProvider may implement numerous methods in a real situation; not only the few methods shown here

4 Adapter (Wrapper) Pattern Existing System Vendor2 Class Existing System Adapter Implements the interface your classes expect And talks to the vendor interface to service your requests.

5 The Adapter configuration 1. The original ServiceProvider class is obsolete and discarded 2. An interface declaring the same methods as the original ServiceProvider is created 3. A replacement class for the original ServiceProvider is found that provides similar functionality, but with a different set of methods: the adaptee 4. An adapter class is written which maps calls from the original methods to the new methods

6 The Adapter Pattern features The client makes a request to the adapter by calling a method on it by continuing to program to the interface that mimics the methods of the original class. The adapter translates the request into one or more calls on the adaptee The amount of code is usually small, but may be complex due to indirect mappings from the original methods to the new methods. The adapter transforms data or results from the adaptee into the form expected by the client The client receives the results of the call and doesn’t care that there is an adapter doing the translation. The only change to the client is that it must create an instance of the adapter rather than the original vendor class.

7 Cases to use Adapter Legacy code exists that interfaces to a class library that has changed Revision change Vendor change New application is being developed that will have to interface to a class library that has yet to be defined Define an interface and write the adapter later SE-2811 Dr. Mark L. Hornick 7

8 The Façade Pattern SE-2811 Dr. Mark L. Hornick 8

9 Watching a Movie... Use multiple interfaces (remotes) to Turn on Receiver/amplifier Turn on TV/Monitor Turn on DVD player Set the Receiver input to DVD Put the Monitor in HDMI input mode Set the Receiver volume to medium Set Receiver to DTS Surround Start the DVD player. Interacting with the following classes: Receiver/Amplifier TV/Monitor DVD

10 To decrease the complexity.. We can create a new class TheaterFacade (e.g. a universal remote) which exposes a few methods such as watchMovie(). The façade treats the various components as a sub system and calls on them to implement the watchMovie method. So to watch a movie, we just call one method, watchMovie and it communicates with the Monitor, DVD, and Receiver for us. The façade still leaves the subsystem accessible to be used directly. If you need the advanced functionality of the subsystem classes, they are available for use.

11 The Problem Complex system Consisting of multiple subsystems Each with its own interface, each with many methods Difficult for clients (blue) to deal with

12 Facade Solution Solution Centralize subsystem interface Simplify/reduce number of centralized methods Façade presents new unified “face” to clients Facade

13 Removing the burden from beginning Java developers with a Façade (WinPlotter) SE-2811 Dr. Mark L. Hornick 13

14 Generic Pattern SE-2811 Dr. Mark L. Hornick 14

15 Facade Consequences Shields clients from subsystem components Make subsystem easier to use Reduces coupling from client to subsystem classes Allow internal classes to change freely Permit “layering” of system function Level of client-subsystem coupling Make Facade an abstract class  Different concrete subclasses for different implementations of the subsystem. Configure the façade object with different subsystem objects.

16 SE-2811 Dr. Mark L. Hornick 16

17 Facade Applications Interface to existing library Unify or “clean up” complex interface Design layered system Various service levels Façade abstracts interface of each level Provide abstract interfaces To alternative implementations


Download ppt "The Adapter Pattern SE-2811 Dr. Mark L. Hornick 1."

Similar presentations


Ads by Google