디자인 모델 - 공장 모델 디 결합 실현
14304 단어 자바 입문
하나의 큰 프로그램 에서 여러 모듈 사이 에 의존 관계 가 존재 하 는데 그것 이 바로 결합 이다. 결합 은 불가피 하 다. 우리 가 해 야 할 일 은 가능 한 한 결합 도 를 낮 추고 높 은 내부 집적 저 결합 을 실현 하 는 코드 이다.예 를 들 어 자바 WEB 개발 에 자주 사용 되 는 3 층 구조, Controller 층, Service 층, Dao 층, Service 층 이 dao 층 방법 을 호출 하려 면 Service 층 에 Dao 층 인터페이스의 실현 대상 을 만들어 야 합 니 다. Service 층 에 Daocing 인터페이스 실현 류 의 대상 을 여러 가지 로 만 들 었 다 면 Dao 층 인터페이스 가 수정 되 었 을 때 Service 층 의 모든 종 류 를 일일이 수정 해 야 합 니 다.후기 유지 에 큰 문 제 를 일 으 켰 습 니 다.그래서 이 장 에서 우 리 는 공장 모델 이 이런 결합 을 어떻게 해결 하 는 지 소개 한다.
2. 전통 적 인 결합 이 풀 리 지 않 을 때
Dao 층 인터페이스 와 실현 클래스
//Dao
public interface AccountDao {
void saveAccount();
}
//Dao
public class AccountDaoImpl implements AccountDao {
@Override
public void saveAccount() {
System.out.println(" ......");
}
}
Service 층 인터페이스 와 실현 클래스 는 Service 실현 클래스 에서 dao 층 의 실현 클래스 대상 을 만 들 고 결합 상황 이 발생 하 는 것 을 보 았 습 니 다.
//service
public interface AccountService {
//
void saveAccount();
}
//service
public class AccountServiceImpl implements AccountService {
// , dao
private AccountDao accountDao= new AccountDaoImpl();
@Override
public void saveAccount() {
// dao
accountDao.saveAccount();
}
}
3 공장 모드 해결 결합
<?xml version="1.0" encoding="utf-8" ?>
<beans>
<bean id="AccountDao" class="com.itheima.Dao.impl.AccountDaoImpl"/>
<bean id="AccountService" class="com.itheima.service.impl.AccountServiceImpl"/>
</beans>
public class BeanFactory {
// map , , ,
private static Map<String,Object> map=new HashMap<>();
static{
// beans.xml
InputStream inputStream = BeanFactory.class.getClassLoader().getResourceAsStream("beans.xml");
// SAXReader , read , document
SAXReader saxReader=new SAXReader();
try {
Document document = saxReader.read(inputStream);
// document getRootElement beans
Element beans = document.getRootElement();
// bean
List<Element> beanList = beans.elements();
// beanList,
for (Element bean : beanList) {
// id
String idValue = bean.attributeValue("id");
// class ,
String classValue = bean.attributeValue("class");
//
Class clazz = Class.forName(classValue);
//
Object interfaceImplObj = clazz.newInstance();
// id map , beans.xml
map.put(idValue,interfaceImplObj);
}
} catch (Exception e) {
e.printStackTrace();
}
}
//
public static Object getBean(String interfaceName){
//
return map.get(interfaceName);
}
}
public class AccountServiceImpl implements AccountService {
// getBean ,
private AccountDao accountDao= (AccountDao) BeanFactory.getBean("AccountDao");
@Override
public void saveAccount() {
// dao
accountDao.saveAccount();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Java】상속한 클래스를 인스턴스화했을 때의 이미지자바 실버 공부하는 동안????가 된 것을 스스로 새기는 메모 ※저작권이 있는지 확실하지 않지만 무서워서 그대로는 아닙니다. 패키지 구성 test1 ┗Human.java ┗Engineer.java ┗Main.java...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.