자바 정적 공장 모드 사용
4887 단어 자바
정적 공장 모델 이 사람 에 게 주 는 첫 인상 은 바로 static + abstract 이다. 이 두 단 어 는 이미 모든 것 을 설명 했다. 하 나 는 주기 가 길 고 하 나 는 반환 값 이 추상 적 이 며 추상 은 자바 심지어 프로 그래 밍 에서 인기 있 는 단어 이다.그러나 이런 실현 은 만능 이 아니 라 맹목적 으로 사용 해 서 는 안 되 며 현실 장면 과 결합 해 야 한다.정적 방식 으로 실 현 된 장면 에 대해 다음 과 같이 요약 한다.
try{
Class.forName("com.mysql.jdbc.Driver");//
Connection conn = DriverManager.getConnection(url, user, password);//
} catch (Exception e) {
e.printStackTrace();
}
상기 와 같이 Connection 은 서비스 인터페이스 로 sql 연결 서 비 스 를 제공 합 니 다.Class. forName ("com. mysql. jdbc. Driver") 은 공급 자 등록 API 입 니 다."DriverManager. getConnection 은 서비스 액세스 API 입 니 다."com. mysql. jdbc. Driver '라 는 종류 가 바로 서비스 제공 자 인터페이스 입 니 다. public interface Service{
void startService();
}
public interface Provider{
Service getService();
}
public class ServiceImp implement Service{
public void startService{
System.out.println("get serviceImpl start Service.");
}
}
public class ProviderImpl implement Provider{
static{
ServiceManager.register("test",new ProviderImpl());
}
public Service getService(){
return new serviceImpl();
}
}
public final class ServiceManager{
private Map maps= new ConcurrentHashMap<>();
public static void register(String name,Provider provider){
if(name!=null && provider!=null && !maps.containKey(provider)){
maps.put(name,provider);
}else{
throw new IllegeException("invaild synax.");
}
}
public static Service getService(String key){
Provider provider=maps.get(key);
if(provider!=null){
return provider.getService();
}else{
throw new IllegeException("register provider first,please.");
}
}
}
//
public class TestMain{
public static void main(String[] args){
Class.forName("xx.xxx.ProviderImpl");
Service service=ServiceManager.getService();
service.startService();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.