정책 모드 가 실제 프로젝트 에서 의 응용 1
4632 단어 디자인 모드
csdn 다운로드 주소:https://download.csdn.net/download/weixin_40841731/10710922
설명:
이 블 로 그 는 실제 프로젝트 개발 에 세 워 졌 다.프로젝트 에서 전략 모델 을 응용 하고 공유 하 며 어린이 들 이 전략 모델 을 신속하게 시작 하고 프로젝트 에서 자신의 업 무 를 최적화 할 수 있 기 를 바 랍 니 다.
업무 장면: 회사 프레임 워 크 를 개발 할 때 우 리 는 프로젝트 의 일부 내용 과 데이터 베 이 스 를 하나의 표 에 연결 하고 이 표 는 프로젝트 를 관리 하 는 데 사용 합 니 다.
프로젝트 관리 인터페이스 에서 모든 표를 보고 해당 라 이브 러 리 의 모든 표를 가 져 옵 니 다.그래서 이 말 을 실행 해 야 합 니 다.
String sql= "show tables from "+ dataBaseNameNew;
그러나 데이터베이스 시트 에 저 장 된 데이터베이스 연결 url 은 jdbc:mysql://192.168.0.00:3306/xxx 이 형식 (ip 주 소 는 마음대로 작성 합 니 다. 예 를 들 어 my sql) 입 니 다.
그래서 url 의 xxx 를 캡 처 해 야 합 니 다. 할당 dataBaseNameNew = xxx 。
의문 (여기 가 정책 모드 의 응용): Oacle 데이터베이스 라면 url 은 jdbc:oracle:thin:@//192.168.2.1:1521/XE
이렇게 캡 처 하 는 방식 은 다르다.개발 프로젝트 과정 에서 Oacle 을 사용 하 는 지 my sql 을 사용 하 는 지 선택 이 많 기 때문에 매번 소스 코드 를 바 꿀 수 없습니다.그래서 전략 모드 로 적절 하 다.
구체 적 인 코드:
1. 공공 캡 처 인터페이스 클래스 를 작성 해 야 합 니 다: DBPathSub. 자바
서로 다른 데이터 베 이 스 를 캡 처 하 는 방식 이 다 르 고 서로 다른 업무 유형 은 모두 이 인 터 페 이 스 를 실현 한다.
/**
*
* @author zr
* @date 2018-9-5
* url :
*
*/
public interface DBPathSub {
//
public String getDataBaseName(String dbPath);
// server
String getServer(String dbPath);
}
2. 구체 적 인 업무 유형, 예 를 들 어 my sql 의 캡 처: my sql DBPathSub. 자바
여기 서 주의해 야 합 니 다. 저 희 는 my sql 데이터 베 이 스 를 캡 처 하 는 업무 유형 을 'my sql DBPathSub' 라 고 규정 합 니 다.oracle oracleDBPathSub。이름 규칙 성: 데이터베이스 이름 + DBPathSub.
import org.springframework.util.StringUtils;
import com.service.dt.DBPathSub;
/**
* mysql url
* @author zr
* @date 2018-9-5
*
*/
public class mysqlDBPathSub implements DBPathSub {
@Override
public String getDataBaseName(String dbPath) {
if(StringUtils.hasText(dbPath)){
if(dbPath.contains("?")){
return dbPath.substring(dbPath.lastIndexOf("/")+1, dbPath.indexOf("?"));
}else {
return dbPath.substring(dbPath.lastIndexOf("/")+1, dbPath.length());
}
}
return null;
}
@Override
public String getServer(String dbPath) {
if(StringUtils.hasText(dbPath)){
return dbPath.substring(dbPath.indexOf("/")+2,dbPath.lastIndexOf("/"));
}
return null;
}
}
3. 전략 유형: DBPathSubStrategy. java
/**
*
* @author zr
* @date 2018-9-5
*
*/
public class DBPathSubStrategy {
//
private DBPathSub dbPathSub;
/**
* ,
* @param dbPathSub
*/
public DBPathSubStrategy(DBPathSub dbPathSub) {
super();
this.dbPathSub = dbPathSub;
}
/**
*
*/
public String getDataBaseName(String dbPath){
return dbPathSub.getDataBaseName(dbPath);
}
public String getServer(String dbPath){
return dbPathSub.getServer(dbPath);
}
}
4. 구체 적 인 service 류 업무 처리 부분 은 바로 전략 선택 부분 입 니 다.
데이터 재고 url 연결 jdbc:mysql://192.168.0.00:3306/xxx 이 형식 은 데이터베이스 에서 우리 가 지금 사용 하고 있 는 것 이 my sql 인지 Oacle 인지 다른 것 인지 직접 가 져 올 수 있 습 니 다.설정 파일 에서 데이터베이스 이름 을 가 져 올 수도 있 습 니 다.
// url
String dbPath = mapper.getDbPath(code);
// (mysql oracle)
String dbType = mapper.getDbType(code);
// url,
// mysqlDBPathSub
Class> forName = Class.forName(clazz.subSequence(0, clazz.lastIndexOf(".")+1)+dbType.toLowerCase()+"DBPathSub");
Object obj = forName.newInstance();
// , DBPathSubStrategy mysqlDBPathSub
DBPathSubStrategy dbPathSubStrategy = new DBPathSubStrategy((DBPathSub) obj);
// 。 mysqlDBPathSub
String dataBaseNameNew = dbPathSubStrategy.getDataBaseName(dbPath);
String sql= "show tables from "+ dataBaseNameNew;
결론: 저 는 개인 적 으로 전략 모델 은 바로 중간 유형 인 전략 류 를 이용 하 는 것 입 니 다.정책 대상 과 업무 클래스 를 연결 합 니 다.전략 류 는 업무 류 가 어떤 전략 대상 을 사용 하 는 지 모 르 고 전략 류 도 구체 적 으로 어떤 전략 대상 을 조정 하 는 지 모 르 며 전략 류 는 부모 인터페이스 가 대응 하고 부모 인 터 페 이 스 를 호출 하 는 방법 만 가지 고 있다.이것 은 결합 을 푸 는 작용 을 하 였 다.업무 류 가 구체 적 인 전략 대상 을 지정 하여 전략 류 에 전달 하면 전략 류 는 호출 하고 자 하 는 전략 대상 을 알 수 있 습 니 다.
결어: 본인 의 모든 문장 은 간단 하고 이해 하기 쉬 우 며 문제점 을 찌 르 는 데 뜻 을 세 웠 습 니 다.물론 간단 하면 서도 많은 세부 사항 과 상세 함 을 소홀히 했 을 수 있 으 니 부족 한 점 이 있 으 면 양해 하고 지적 해 주 십시오. 만약 문장 이나 실현 기술 에 문제 가 있 으 면 저 에 게 연락 하 십시오: qq: 1226500260 메 일 박스:[email protected]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.