Adapter and Façade Patterns
Download
Report
Transcript Adapter and Façade Patterns
Adapter and Façade
Patterns
By Wode Ni and Leonard Bacon-Shone
Outline: What we’ll cover
Façade Pattern
Motivation
Definition of a Façade
Advantages of Façade Pattern
The principle of least knowledge
Adapter Pattern
Motivation
Object Adapter
Class Adapter
Real World Adapter: Enumeration to Iterator
Adapter vs Façade vs Decorator
Implementation of Class adapter: C++ and Java
Façade Pattern: Motivation
Suppose we have a complex system, but we want a sequence of actions to be
executed on one keystroke.
Example: a Computer
The procedure of starting a computer: After the power button is clicked. A
series of operation are done by the CPU, RAM, and HDD, and then the
operating system is booted.
Do it individually or do it collectively?
http://www.techspot.com/news/52
073-infographic-what-happenswhen-your-computer-turns-on.html
Definition of Facade
“A unified interface to a set
of interfaces in a subsystem.
Façade defines a higher-level
interface that makes the
subsystem easier to use.”
Interface - does not only
refer to a Java interface.
Real-world example:
Compiler.
When you hit compile, or do
“javac”, a sequence of
instructions got executed in
side a complex java
compiler.
Advantages of having a Facade
No need to change my way of turning a computer on!
Regardless of the details of the computer: change of
CPU, OS, Motherboard etc.
Decouple the client code(pressing the power button)
from any one subsystem(Hardware of the computer)!
Code example
Still have an option to gain control of individual
components.
You can change the setting for your brand new Razor
mouse!
The façade pattern leaves you the access to all the
classes
The principle of least knowledge
Definition: Talk only to your immediate friends
Guidelines: In a method of a class, only invoke methods that belong to
The object that the class itself represents
Objects passed in as a parameter to the method
Any object the method creates or instantiates
Any components of the object
How does the Façade pattern apply this knowledge?
We are not breaking the rules!
Adapter Pattern: Motivation
Existing code incompatible with other code you want to use
To allow existing code to use other code, create an adapter
Imagine a person from Hong Kong trying to charge their phone
Hong Kong people use a different socket to the US
In order to charge their phone, they must use an adapter
Adapter Pattern allows for clients to use existing software to
connect to incompatible classes
Adapter Pattern: Definition
“The Adapter Pattern converts the interface of a class into another interface
the client expects. Adapter lets classes work together that couldn’t otherwise
because of incompatible interfaces.” (p.243)
Terms explained:
Vendor class = adaptee = the US socket
Client code = Hong Kong plug
Adapter = HK to US converter
Naming Convention in the book: Adaptee’s name + “Adapter”
Plain English: We want the functionality of the adaptee via the language of
the target interface, which is not supported by the adaptee.
Object Adapter
Object adapter uses composition to store the object of the adaptee and
implement the target interface (the interface used by the client)
Because of polymorphism, all the subclasses of the adaptee can be adapted
by the object adapter
Imagine a Chinese person traveling to the US, and wanting to speak like an
American
Coding Example
Class Adapter
Class adapter uses multiple inheritance
Generally considered not possible in Java
While it is possible to emulate multiple inheritance in Java 8, using the default
method in interfaces
Discussed further at the end of the presentation
Class adapters inherit both the client and adaptee classes
Class adapters mean that we don’t have to reimplement the entire interface
because of inheritance
Object Adapter
Class Adapter
Enumeration to Iterator
Some legacy code may still use the Enumerator
interface, but a client who needs the functionality
of the legacy code has an existing system with an
Iterator
In order to access the functionality of the legacy code,
an adapter is needed
Some methods are very easily adapted, e.g.
hasNext() to hasMoreElements()
But what about a method that doesn’t exist in
Enumeration, like the remove() method?
The best that can be done about non-existing related
methods is throw a runtime exception (fortunately,
the Iterator class already does this with
UnsupportedOperationException)
Adapter vs Façade vs Decorator
Difference of intents:
Pattern
Intent
Adapter
Convert one interface to another
Facade
Makes an interface simpler
Decorator
Doesn’t alter the interface, but adds responsibility
谢谢
AmericanAdapter adapter = new AmericanAdapter(american);
adapter.xiexie();
Thank you!
Asked by ~everybody: implementation of
class adapter!
C++ version:
multiple
inheritance. Even
two way adapter!
Java approximation:
new feature in
Java 8 = default
methods in
interface