Wzorce projektowe - wzór elewacji
Wzór fasady ukrywa złożoność systemu i zapewnia klientowi interfejs, za pomocą którego klient może uzyskać dostęp do systemu. Ten typ wzorca projektowego jest objęty wzorem strukturalnym, ponieważ ten wzór dodaje interfejs do istniejącego systemu, aby ukryć jego złożoność.
Ten wzorzec obejmuje pojedynczą klasę, która zapewnia uproszczone metody wymagane przez klienta i deleguje wywołania metod istniejących klas systemowych.
Realizacja
Zamierzamy stworzyć interfejs Shape i konkretne klasy implementujące interfejs Shape . Kolejnym krokiem jest klasa ShapeMaker elewacji .
Klasa ShapeMaker używa konkretnych klas do delegowania wywołań użytkowników do tych klas. FacadePatternDemo , nasza klasa demonstracyjna, użyje klasy ShapeMaker do pokazania wyników.
Krok 1
Utwórz interfejs.
Shape.java
public interface Shape {
void draw();
}
Krok 2
Utwórz konkretne klasy implementujące ten sam interfejs.
Rectangle.java
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Rectangle::draw()");
}
}
Square.java
public class Square implements Shape {
@Override
public void draw() {
System.out.println("Square::draw()");
}
}
Circle.java
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Circle::draw()");
}
}
Krok 3
Utwórz klasę elewacji.
ShapeMaker.java
public class ShapeMaker {
private Shape circle;
private Shape rectangle;
private Shape square;
public ShapeMaker() {
circle = new Circle();
rectangle = new Rectangle();
square = new Square();
}
public void drawCircle(){
circle.draw();
}
public void drawRectangle(){
rectangle.draw();
}
public void drawSquare(){
square.draw();
}
}
Krok 4
Użyj elewacji, aby narysować różne rodzaje kształtów.
FacadePatternDemo.java
public class FacadePatternDemo {
public static void main(String[] args) {
ShapeMaker shapeMaker = new ShapeMaker();
shapeMaker.drawCircle();
shapeMaker.drawRectangle();
shapeMaker.drawSquare();
}
}
Krok 5
Sprawdź dane wyjściowe.
Circle::draw()
Rectangle::draw()
Square::draw()