Facade Pattern trong Java – Code ví dụ Facade Pattern

Facade Pattern trong Java – Code ví dụ Facade Pattern

1. Facade Pattern là gì?

Facade Pattern là một mẫu cấu trúc (Structural Pattern).

Facade Pattern được dùng để các ứng dụng phía client dễ dàng giao tiếp với hệ thống. Thay vì phải làm việc với nhiều hệ thống/module con, Facade Pattern giúp ứng dụng client chỉ phải giao tiếp với 1 hệ thống duy nhất.

Ví dụ: Trên màn hình đăng ký, ta nhập thông tin như username, email… sau đó sang màn hình tiếp theo nhập địa chỉ (quận/huyện, phường/xã, đường, số nhà…) rồi sang màn hình tiếp để nhập các thông tin liên lạc như số điện thoại…

Rõ ràng client sẽ phải tốn nhiều thời gian và thao tác không thân thiện. Với Facade Pattern, ta gộp tất các thông tin đó vào một màn hình, và client chỉ cần giao tiếp với màn hình đó thôi.

2. Facade Pattern UML Diagram.

Facade Pattern trong Java - Code ví dụ Facade Pattern

3. Ví dụ

Ta có 1 hệ thống cũ với các thông tin về người như Address, PhoneNumber, Name. Ta muốn quản lí các thông tin trên bằng cách xây dựng 1 lớp PersonFacade tận dụng lại các lớp ở trên.

Facade Pattern trong Java - Code ví dụ Facade Pattern

Code ví dụ:

Name.java

public class Name {
  String firstName;
  String middleName;
  String lastName;

  public Name() {
  }

  public Name(String firstName, String middleName, String lastName) {
    this.firstName = firstName;
    this.middleName = middleName;
    this.lastName = lastName;
  }

  public String getFirstName() {
    return firstName;
  }

  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }

  public String getMiddleName() {
    return middleName;
  }

  public void setMiddleName(String middleName) {
    this.middleName = middleName;
  }

  public String getLastName() {
    return lastName;
  }

  public void setLastName(String lastName) {
    this.lastName = lastName;
  }

  public void display() {
    System.out.println("Name: " + this.firstName + " " + this.middleName + " " + this.lastName);
  }
}

Address.java

public class Address {
  String city;
  String street;
  String country;

  public Address() {
  }

  public Address(String city, String street, String country) {
    this.city = city;
    this.street = street;
    this.country = country;
  }

  public String getCity() {
    return city;
  }

  public void setCity(String city) {
    this.city = city;
  }

  public String getStreet() {
    return street;
  }

  public void setStreet(String street) {
    this.street = street;
  }

  public String getCountry() {
    return country;
  }

  public void setCountry(String country) {
    this.country = country;
  }

  public void display() {
    System.out.println("Address: " + this.street + " - " + this.city + " - " + this.country);
  }
}

PhoneNumber.java

public class PhoneNumber {
  String phoneNumber;
  String postalCode;

  public PhoneNumber() {
  }

  public PhoneNumber(String phoneNumber, String postalCode) {
    this.phoneNumber = phoneNumber;
    this.postalCode = postalCode;
  }

  public String getPhoneNumber() {
    return phoneNumber;
  }

  public void setPhoneNumber(String phoneNumber) {
    this.phoneNumber = phoneNumber;
  }

  public String getPostalCode() {
    return postalCode;
  }

  public void setPostalCode(String postalCode) {
    this.postalCode = postalCode;
  }

  public void display() {
    System.out.println("PhoneNumber: " + this.postalCode + " " + this.phoneNumber);
  }
}

PersonFacade.java

public class PersonFacade {

  Name name;
  Address address;
  PhoneNumber phoneNumber;

  public PersonFacade() {
  }

  public PersonFacade(Name name, Address address, PhoneNumber phoneNumber) {
    this.name = name;
    this.address = address;
    this.phoneNumber = phoneNumber;
  }

  public Name getName() {
    return name;
  }

  public void setName(Name name) {
    this.name = name;
  }

  public Address getAddress() {
    return address;
  }

  public void setAddress(Address address) {
    this.address = address;
  }

  public PhoneNumber getPhoneNumber() {
    return phoneNumber;
  }

  public void setPhoneNumber(PhoneNumber phoneNumber) {
    this.phoneNumber = phoneNumber;
  }

  public void display() {
    this.name.display();
    this.address.display();
    this.phoneNumber.display();
    System.out.println("-------------------------------------------");
  }

  public void setInformation() {
    Scanner scanner = new Scanner(System.in);
    System.out.print("nhap duong: ");
    String street = scanner.nextLine();
    System.out.print("nhap thanh pho: ");
    String city = scanner.nextLine();
    System.out.print("nhap quoc gia: ");
    String country = scanner.nextLine();
    System.out.print("nhap so dien thoai: ");
    String number = scanner.nextLine();
    System.out.print("nhap ma vung: ");
    String postalCode = scanner.nextLine();
    System.out.print("nhap ho: ");
    String firstName = scanner.nextLine();
    System.out.print("nhap ten dem: ");
    String middleName = scanner.nextLine();
    System.out.print("nhap ten: ");
    String lastName = scanner.nextLine();

    this.address = new Address(city, street, country);
    this.name = new Name(firstName, middleName, lastName);
    this.phoneNumber = new PhoneNumber(number, postalCode);
    scanner.close();
  }
}
Demo:
public class MainApp {
  public static void main(String[] args) {
    PersonFacade person = new PersonFacade();
    person.setInformation();
    person.display();
  }
}

Kết quả:

nhap duong: Nguyen Trai
nhap thanh pho: Ha Noi
nhap quoc gia: Viet Nam
nhap so dien thoai: 01666666666
nhap ma vung: 1000
nhap ho: Tran
nhap ten dem: Van
nhap ten: An
Name: Tran Van An
Address: Nguyen Trai - Ha Noi - Viet Nam
PhoneNumber: 1000 01666666666
-------------------------------------------

 

Okay, Done!

Thanks các bạn đã theo dõi. Xem thêm các ví dụ khác về design pattern tại: https://stackjava.com/category/design-pattern

References:

https://en.wikipedia.org/wiki/Facade_pattern

 

stackjava.com