Chapters
facade pattern (also spelled façade) is a software-design pattern commonly used in object-oriented programming. Analogous to a facade in architecture, a facade is an object that serves as a front-facing interface masking more complex underlying or structural code in order to simplify the complexity of the system behind the facade.
To implement this pattern, we need a class that implements an interface and the implementations of the methods of the interface are delegated to the system behind the facade. Although, the interface may perform additional functionality before/after forwarding a request. Take a look at this example.
Facade Pattern
facade pattern (also spelled façade) is a software-design pattern commonly used in object-oriented programming. Analogous to a facade in architecture, a facade is an object that serves as a front-facing interface masking more complex underlying or structural code in order to simplify the complexity of the system behind the facade.
To implement this pattern, we need a class that implements an interface and the implementations of the methods of the interface are delegated to the system behind the facade. Although, the interface may perform additional functionality before/after forwarding a request. Take a look at this example.
/*
Client
*/
public class ClientCode{
public static void main(String[] args){
RoomInterface ri =
new RoomController(new RoomControl());
ri.openThenMark();
System.out.println();
ri.unmarkThenClose();
}
}
/*
Facade
*/
interface RoomInterface{
void openMarkThenClose();
void openUnmarkThenClose();
void openThenMark();
void openThenUnmark();
void markThenClose();
void unmarkThenClose();
}
class RoomController implements RoomInterface{
RoomControlInterface rci;
RoomController(RoomControlInterface rci){
this.rci = rci;
}
@Override
public void openMarkThenClose(){
rci.openRoom();
rci.markRoom();
rci.closeRoom();
}
@Override
public void openUnmarkThenClose(){
rci.openRoom();
rci.unmarkRoom();
rci.closeRoom();
}
@Override
public void openThenMark(){
rci.openRoom();
rci.markRoom();
}
@Override
public void openThenUnmark(){
rci.openRoom();
rci.unmarkRoom();
}
@Override
public void markThenClose(){
if(!rci.openRoom()){
System.out.println("Room is not open.");
System.out.println
("Therefore, it can't be closed.");
return;
}
rci.markRoom();
rci.closeRoom();
}
@Override
public void unmarkThenClose(){
if(!rci.openRoom()){
System.out.println("Room is not open.");
System.out.println
("Therefore, it can't be closed.");
return;
}
rci.unmarkRoom();
rci.closeRoom();
}
}
/*
Complex System
*/
interface RoomControlInterface{
boolean openRoom();
void markRoom();
void unmarkRoom();
void closeRoom();
}
class RoomControl implements RoomControlInterface{
private boolean isMarked = false;
private boolean isOpen = false;
@Override
public boolean openRoom(){
if(isOpen){
System.out.println
("Room is already open!");
}
else{
System.out.println
("Room has been opened!");
isOpen = true;
}
return isOpen;
}
@Override
public void markRoom(){
if(isMarked){
System.out.println
("Room is already marked. "+
"no need to mark again.");
}
else{
isMarked = true;
System.out.println
("Room has been marked!");
}
}
@Override
public void unmarkRoom(){
if(!isMarked){
System.out.println
("Room is already unmarked. "+
"no need to unmark again.");
}
else{
isMarked = false;
System.out.println
("Room has been unmarked!");
}
}
@Override
public void closeRoom(){
if(isOpen){
System.out.println
("Room has been closed!");
isOpen = false;
}
}
}
Result
Room has been opened!
Room has been marked!
Room is already open!
Room has been unmarked!
Room has been closed!
No comments:
Post a Comment