정책 모드 가 실제 프로젝트 에서 의 응용 1

4632 단어 디자인 모드
* * * 테스트 데모    git 창고 주소:https://github.com/alwaysInRoad/test-strategy-demo1.git
                          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]

좋은 웹페이지 즐겨찾기