Announcement

Collapse
No announcement yet.

Singleton - Design Patterm

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [Java] Singleton - Design Patterm

    Chào các bạn,
    Mình đang tìm hiểu vể Design Patterm đến phần Singleton Patterm và có một thắc mắc sau đây:
    Mình có 2 đoạn code mô tả 2 class Singleton khác nhau.

    Code 1
    Code:
    public class Singleton {
    	
    	String resourceObject;
    
    	private static Singleton instanceSingleton;
    
    	private Singleton() {
    		resourceObject = "";
    	}
    
    	public String getResourceObject() {
    		return resourceObject;
    	}
    
    	public void setResourceObject(String value) {
    		this.resourceObject = value;
    	}
    
    	public static Singleton getInstance() {
    		if (instanceSingleton == null) {
    			instanceSingleton = new Singleton();
    		}
    		return instanceSingleton;
    	}
    }
    Code 2
    Code:
    public class NewSingleton {
    
    	public NewSingleton() {
    	}
    
    	static String resourceObject;
    
    	static {
    		resourceObject = "";
    	}
    
    	public static String getResourceObjetc() {
    		return resourceObject;
    	}
    
    	public static void setRerourceObject(String value) {
    		resourceObject = value;
    	}
    }
    Vấn đề:
    Code 1 viết theo đúng cấu trúc template của một singleton class mà mình đọc trong nhiều sách, bao gồm 1 method public getInstance để trả về đối tượng duy nhất. Kèm theo là các method để tương tác với Instance đó: như get,set value.
    Code 2 là loại mình thường dùng để viết một lớp có khả năng chia sẽ dữ liệu chung cho nhiều đối tượng và không thể được khởi tạo để ra được 2 instances.

    Câu hỏi:
    Code 2 có áp dụng theo Singleton Patterm hay không ? Vì mình thấy chức năng của cả 2 lớp tương tự nhau.
    Nếu câu trả lời là không, vậy thì hạn chế/ khuyết điểm của Code 2 là gì so với cách áp dụng nguyên mẫu khai báo Singleton sách vở ?

  • #2
    Với cách 2, bạn đang dùng một dạng của static class, tức là tất cả phương thức, thuộc tính trong class đều là static.
    Vì vậy câu hỏi của bạn tương tự "Singleton vs Static Classes". Tham khảo: http://www.dotnetperls.com/singleton-static
    Theo đó thì singleton có một số ưu điểm như:
    - Đối tượng singleton có thể dùng làm tham số của các phương thức cần sử dụng nó.
    - Singleton có thể implement interface.
    - Singleton cho phép kế thừa.
    => dễ reuse, maintain hơn.

    Comment

    LHQC

    Collapse
    Working...
    X