한 가지 방법은 수업을 조금 다르게 재 설계하는 것입니다. 사용되기 전에 초기화해야하는 간단한 데이터베이스 클래스를 고려하십시오. 나는 자바 녀석이다. 그래서 ...
public class Database {
public void init(String username, String password) // must call this first!
public List<Object> runQuery(String sql) // ...
}
그래서 init를 먼저 호출해야한다. 초기화를 수행하고 실제 데이터베이스 객체를 반환하는 DatabaseFactory를 만들 수 있습니다. DatabaseFactory 만 Database를 생성 할 수 있도록 생성자를 숨길 수 있습니다 (Java에서는 중첩 클래스, C++에서는 friend 클래스일까요?).
public class DatabaseFactory {
public Database init(String username, String password) // ...
public class Database {
private Database() {}
public List<Object> runQuery(String sql) // ...
}
}
이제는 기본 객체를 가져 오기 위해 팩토리를 통과해야합니다.
DatabaseFactory factory = new DatabaseFactory();
Database database = factory.init("username", "password"); // first init (call method A)
// now I can use database (or B in your case)
database.runQuery("select * from table");
당신은 실제로 명령을 시행 할 수 없습니다 (이미 언급 된 해결책이 있습니다). 템플릿 패턴으로 다시 디자인하고이 특별한 필요성을 피할 수 있습니다. http://en.wikipedia.org/wiki/Template_method_pattern – Jayan