Mẫu thiết kế - Mẫu đối tượng rỗng
Trong mẫu đối tượng Null, một đối tượng null thay thế kiểm tra đối tượng NULL. Thay vì đặt nếu kiểm tra giá trị null, Null Object phản ánh mối quan hệ không làm gì cả. Đối tượng Null như vậy cũng có thể được sử dụng để cung cấp hành vi mặc định trong trường hợp dữ liệu không có sẵn.
Trong mẫu Null Object, chúng ta tạo một lớp trừu tượng chỉ định các hoạt động khác nhau sẽ được thực hiện, các lớp cụ thể mở rộng lớp này và một lớp đối tượng null cung cấp không thực hiện gì cho lớp này và sẽ được sử dụng dường như khi chúng ta cần kiểm tra giá trị null.
Thực hiện
Chúng ta sẽ tạo một lớp trừu tượng AbstractCustomer xác định các hoạt động. Đây là tên của khách hàng và các lớp cụ thể mở rộng lớp AbstractCustomer . Một lớp nhà máy CustomerFactory được tạo ra để trở về hoặc là RealCustomer hoặc NullCustomer đối tượng dựa trên tên của khách hàng được truyền cho nó.
NullPatternDemo , lớp demo của chúng tôi, sẽ sử dụng CustomerFactory để chứng minh việc sử dụng mẫu Null Object.
Bước 1
Tạo một lớp trừu tượng.
AbstractCustomer.java
public abstract class AbstractCustomer {
protected String name;
public abstract boolean isNil();
public abstract String getName();
}
Bước 2
Tạo các lớp cụ thể mở rộng lớp trên.
RealCustomer.java
public class RealCustomer extends AbstractCustomer {
public RealCustomer(String name) {
this.name = name;
}
@Override
public String getName() {
return name;
}
@Override
public boolean isNil() {
return false;
}
}
NullCustomer.java
public class NullCustomer extends AbstractCustomer {
@Override
public String getName() {
return "Not Available in Customer Database";
}
@Override
public boolean isNil() {
return true;
}
}
Bước 3
Tạo lớp CustomerFactory .
CustomerFactory.java
public class CustomerFactory {
public static final String[] names = {"Rob", "Joe", "Julie"};
public static AbstractCustomer getCustomer(String name){
for (int i = 0; i < names.length; i++) {
if (names[i].equalsIgnoreCase(name)){
return new RealCustomer(name);
}
}
return new NullCustomer();
}
}
Bước 4
Sử dụng các CustomerFactory để có được một trong hai RealCustomer hoặc NullCustomer đối tượng dựa trên tên của khách hàng được truyền cho nó.
NullPatternDemo.java
public class NullPatternDemo {
public static void main(String[] args) {
AbstractCustomer customer1 = CustomerFactory.getCustomer("Rob");
AbstractCustomer customer2 = CustomerFactory.getCustomer("Bob");
AbstractCustomer customer3 = CustomerFactory.getCustomer("Julie");
AbstractCustomer customer4 = CustomerFactory.getCustomer("Laura");
System.out.println("Customers");
System.out.println(customer1.getName());
System.out.println(customer2.getName());
System.out.println(customer3.getName());
System.out.println(customer4.getName());
}
}
Bước 5
Xác minh kết quả đầu ra.
Customers
Rob
Not Available in Customer Database
Julie
Not Available in Customer Database