디자인 모델 노트 공장 모델 - 단순 공장 모델 (Simple Factory Pattern)
4250 단어 디자인 모드
공장 모델 은 대량의 공동 인터페이스 가 있 는 유형 을 예화 하 는 것 을 전문 적 으로 책임 지고 매번 어떤 유형의 모델 을 예화 해 야 하 는 지 미리 알 필요 가 없다.이것 은 대상 을 만 드 는 데 사용 할 인 터 페 이 스 를 정의 합 니 다. 하위 클래스 에서 어떤 종 류 를 예화 할 지 결정 합 니 다.
2. 간단 한 공장 모델 의 구조:
3. 간단 한 실례:
1. 하나의 인 터 페 이 스 를 정의 하고 자바 비 안 을 대표 합 니 다.
public interface UserDao {
public void save();
}
2. UserDao 의 실현 클래스 정의:
public class UserDaoWithMySql implements UserDao{
public void save(){
System.out.println("mysql save");
}
}
public class UserDaoWithOracle implements UserDao{
public void save(){
System.out.println("Oracle Save!");
}
}
3. UserDao 를 만 드 는 공장 을 정의 합 니 다.
/**
* UserDao
* @author yu
*
*/
public class UserDaoFactory {
public static UserDao create(){
// return new UserDaoWithMySql();
return new UserDaoWithOracle();
}
}
4. 테스트:
UserDao ud = UserDaoFactory.create();
ud.save();
사용 할 때 서로 다른 실현 류 를 얻 으 려 면 UserDao Factory 의 반환 값 만 바 꾸 면 되 지만 유연성 이 부족 합 니 다. 다음 의 예 를 보 세 요.
4. Bean 을 불 러 오 는 BeanFactory 가 지 연 됩 니 다.
1. properties 파일 정의: bean. properties:
mysql=com.cxy.factory.simple.UserDaoWithMySql
oracle=com.cxy.factory.simple.UserDaoWithOracle
2. BeanFactory (BeanFactory lazy) 정의:package com.cxy.factory.simple;
import java.io.IOException;
import java.util.Properties;
public class BeanFactory_lazy {
private static Properties pro;
static{
pro = new Properties();
try {
// properties
pro.load(BeanFactory_lazy.class.getClassLoader().getResourceAsStream("bean.properties"));
} catch (IOException e) {
e.printStackTrace();
}
}
public static UserDao getBean(String key){
if(pro.containsKey(key)){
String className = pro.getProperty(key);
try {
return (UserDao) Class.forName(className).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}else{
throw new IllegalArgumentException();
}
}
}
3. 테스트:
UserDao ud = BeanFactory_lazy.getBean("oracle");
ud.save();
실제 응용 에서 필요 에 따라 getBean () 방법 에 서로 다른 파 라 메 터 를 입력 하면 서로 다른 Bean 을 얻 을 수 있 습 니 다.위의 코드 에서 Bean 을 유연 하 게 가 져 오 는 방법 을 실 현 했 지만 Bean 을 사용 할 때 만 해당 하 는 Bean 을 예화 할 수 있 습 니 다. 가끔 은 Bean Factory 를 초기 화 할 때 설정 한 Bean 을 모두 만 들 고 싶 습 니 다. 아래 코드 를 보 세 요. 4. 지연 되 지 않 고 추가 되 는 Bean Factory.
package com.cxy.factory.simple;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Map.Entry;
public class BeanFactory {
private static Properties pro;
// properties
private static Map map = new HashMap();
static{
pro = new Properties();
try {
pro.load(BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties"));
} catch (IOException e) {
e.printStackTrace();
}
// properties , map
for(Entry
빈 을 예화 하 는 절 차 를 static 정적 블록 에 넣 으 면 이 종 류 를 예화 하기 전에 모든 빈 대상 을 만 들 고 사용 할 때 직접 가 져 가면 됩 니 다.위의 코드 는 Spring 에서 BeanFactory 의 간단 한 실현 입 니 다. 다만 Spring 은 Xml 프로필 을 사용 합 니 다. 이것 은 상 관 없 이 원리 가 가장 중요 하고 실현 경 로 는 그 다음 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.