The
facade pattern is a wrapper of many other interfaces in a result to produce a
simpler interface. Facade hides the complexities of the system and provides an
interface to the client from where the client can access the system easily.
A
facade is an object that provides a simplified interface to a larger body of
code, such as a class library.
Example: This
is an abstract example of how a client ("you") interacts with a
facade (the "computer") to a complex system (internal computer parts,
like CPU and HardDrive).
/* Complex parts */
class CPU {
public void freeze() {
...
}
public void jump(long position) {
...
}
public void execute() {
...
}
}
class Memory {
public void load(long position, byte[] data) {
...
}
}
class HardDrive {
public byte[] read(long lba, int size) {
...
}
}
/* Facade */
class ComputerFacade {
private CPU processor;
private Memory ram;
private HardDrive hd;
public ComputerFacade() {
this.processor
= new CPU();
this.ram = new Memory();
this.hd = new HardDrive();
}
public void start() {
processor.freeze();
ram.load(BOOT_ADDRESS, hd.read(BOOT_SECTOR,
SECTOR_SIZE));
processor.jump(BOOT_ADDRESS);
processor.execute();
}
}
/* Client */
class Facade {
public static void main(String[] args) {
ComputerFacade
computer = new
ComputerFacade();
computer.start();
}
}
Points to remember about
façade design pattern:
1. Wrap a poorly
designed collection of APIs with a single well-designed API.
2. Reduce dependencies
of outside code on the inner workings of a library, since most code uses the
facade, thus allowing more flexibility in developing the system;
3. Facade design
pattern is more like a helper for client applications; it doesn’t hide
subsystem interfaces from the client. Whether to use Facade or not is
completely dependent on client code.
4. Facade design
pattern can be applied at any point of development, usually when the number of
interfaces grows and system gets complex.
5. Subsystem
interfaces are not aware of Facade and they shouldn’t have any reference of the
Facade interface.
We
can use Factory pattern with Facade to provide better interface to client
systems.
No comments:
Post a Comment