同じ情報を何度も取得しない。取得するたびに結果が異なるのなら別だが、そうでないなら、結果を保存しておいて2回目以降はその結果を返すようにする。
|
Customer.java
public class Customer {
private String name;
private String address;
public Customer(int number) {
//
// DB にアクセスし name、address を設定
//
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
}
Process.java
public class Process {
public void doProc() {
Customer c1 = new Customer(1);
Customer c2 = new Customer(25);
Customer c3 = new Customer(1);
}
}
与えられた number をもとにデータベースから情報を取り出すクラス Customer を作成しています。 しかし、同じ number の情報を得るのに、別のインスタンスを生成していて、無駄があります。 |
Customer.java
public class Customer {
private String name;
private String address;
public Customer(int number) {
//
// DB にアクセスし name、address を設定
//
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
}
CustomerFactory.java
public class CustomerFactory {
private HashMap<Integer, Customer> pool =
new HashMap<Integer, Customer>();
private static CustomerFactory singleton =
new CustomerFactory();
private CustomerFactory() {}
public static CustomerFactory getInstance() {
return singleton;
}
public synchronized
Customer getCustomer(int number) {
Integer no = new Integer(number);
Customer c = (Customer)pool.get(no);
if (c == null) {
c = new Customer(number);
pool.put(no, c);
}
return c;
}
}
Process.java
public class Process {
public void doProc() {
CustomerFactory factory =
CustomerFactory.getInstance();
Customer c1 = factory.getCustomer(1);
Customer c2 = factory.getCustomer(25);
Customer c3 = factory.getCustomer(1);
}
}
一度生成された Customer のインスタンスは、(この例では、ハッシュテーブル pool に)保存されています。よって、同じ number であれば、この保存されたインスタンスが返されます。 |