Archive

Posts Tagged ‘Java’

Singleton class, nó là gì ?

June 18th, 2009 Fu4ny No comments

Bạn đã nghe thấy thuật ngữ Singleton class ? Đó là 1 class mà trong toàn bộ chương trình chúng ta chỉ có thể tạo 1 "instance" ( thực thể ) duy nhất của nó.

Với bài viết này, tôi mong các bạn có 1 cái nhìn tổng quan về Singleton class, và cách cài đặt nó trong Java và C++.

Đầu tiên là về ý tưởng.

Đối với Singleton class, thì chương trình chỉ được phép tạo 1 instance duy nhất của nó, vì vậy

  1. Constructor của class là private
  2. Class phải có reference ( tham chiếu ) đến cái instance duy nhất đó, tức là chúng ta dùng 1 tham chiếu tới class = 1 biến static
  3. Do ko có constructor public, nên ta cần có 1 phương thức để khởi tạo class.

Đó là các yêu cầu dành cho Java.

Giả sử chúng ta xây dựng 1 class SingleTon trong Java.
Đúng tinh thần phải có 1 tham chiếu đến thực thể duy nhất, ta tạo 1 biến static. Và đương nhiên là 1 constructor thuộc tính private. Trong constructor này bạn cài đặt như bạn muốn.

1
2
3
4
public class SingleTon {
    private static SingleTon _singleRef = new SingleTon();
    private SingleTon() {};
}

Tiếp theo là 1 hàm getInstance để lấy địa chỉ của thực thể của class đó.

1
2
3
4
5
6
7
8
9
10
11
12
13
public class SingleTon {
	private static SingleTon _singleRef = new SingleTon();
	private SingleTon() {};
	public static SingleTon getInstance() {
		if ( _singleRef == null ) {
			_singleRef = new SingleTon();
		}
		return _singleRef;
	}
	public void sayHello () {
		System.out.println("Hello! I'm the one!");
	}
}

Giải thích: nếu tham chiếu chưa chỉ đến vùng nhớ nào, thì ta tạo 1 thực thể mới ( thực ra việc này để đảm bảo rằng instance luôn có ). Nếu nó đã trỏ đến 1 vùng nhớ thì ta trả giá trị vùng nhớ.

Sử dụng nó thế nào ? Có 2 cách
1. Tạo class trỏ đến vùng nhớ

1
2
3
4
5
public static void main(String[] args) {
	SingleTon obj = SingleTon.getInstance();
	if ( obj == null ) System.err.println("Cannot creat instance");
	obj.sayHello();
}

2. Sử dụng trực tiếp không qua khai báo

1
2
3
public static void main(String[] args) {
	SingleTon.getInstance().sayHello();
}

Đây là toàn bộ cài đặt dành cho Java, cài đặt cho C++ có 1 vài cái khác phức tạp hơn mà tôi sẽ trình bày ở trang sau

Categories: Post Tags: , ,

Java learning timeline

October 16th, 2008 Fu4ny No comments

Đã đăng kí xong, giờ vấn đề còn lại là thi chọn và học Java.

Còn ngày thứ 5,6,7 để học =))

Thử xem 3 ngày học Java sẽ học được những gì :)).

Log:

Ngày thứ 5 qua đi mà trong đầu còn rất mơ hồ, may là đã kịp tải ebook và Eclipse + test 1 vài cái cơ bản

[Done] Đọc "Java Basics" và "Java™ Tutorial"
[Done]
Đọc các giấy phép về bản quyền nguồn mở, GNU/GPL và BSD
[Done] PNNM trên Linux và ứng dụng cơ bản
[Done] Thi chọn - Có thể phải thi hoặc ko phải thi =))

Categories: Post Tags: ,