일정 시간 간격 으로 학습 디자인 모델 ― 전략 모델
현재 의 이해 로 는 코드 품질, 기능 수 요 를 실현 하 는 것, 2 코드 가 독성 (유지 가능), 3 코드 의 확장 성 (디자인 모델).
블 로그 가든 http://www.cnblogs.com/wanggary/archive/2011/04/07/2008796.html 화해시키다
csdn http://blog.csdn.net/wuzhekai1985/article/details/6665197 。
비교적 긴 박문 에 대해 가 독성 이 좋아 서 사람들 로 하여 금 적지 않 은 이익 을 얻 게 하 는 동시에 눈 과 마음 을 즐겁게 한다.위의 두 링크 는 대비 이다.나의 공력 이 점점 높 아 지면 서 풍격 이 양호 하고 독창적 이 며 사상 적 인 박문 을 쓰 는 것 이 나의 추구 이다.다음 정책 모드 는 csdn 링크 로 전 송 됩 니 다.
전략 모드 는 일련의 알고리즘 을 정의 하여 하나씩 밀봉 하고 서로 바 꿀 수 있 도록 하 는 것 을 말한다.이 모델 은 알고리즘 을 사용 하 는 고객 에 게 독립 적 으로 변화 시 킬 수 있 습 니 다.즉, 이러한 알고리즘 이 완성 한 기능 은 똑 같 고 대외 적 인 인터페이스 와 마찬가지 로 각자 의 실현 에 차이 가 있 을 뿐이다.전략 모드 로 알고리즘 을 밀봉 하면 효과 가 비교적 좋다.다음은 캐 시 (Cache) 의 대체 알고리즘 을 예 로 들 어 정책 모드 를 구현 합 니 다.
캐 시의 대체 알고리즘 은 무엇 입 니까?간단하게 설명 하면 Cache 가 부족 할 때 Cache 컨트롤 러 는 Cache 의 한 줄 을 선택 하고 얻 고 싶 은 데이터 로 교체 해 야 합 니 다.선택 정책 은 Cache 의 대체 알고리즘 입 니 다.다음은 UML 그림 을 드 리 겠 습 니 다.
ReplaceAlgorithm 은 추상 적 인 유형 으로 알고리즘 의 인 터 페 이 스 를 정 의 했 고 세 가지 유형 이 이 추상 적 인 유형, 즉 구체 적 인 알고리즘 실현 을 계승 했다.Cache 클래스 에서 대체 알고리즘 을 사용 해 야 하기 때문에 하 나 를 유지 하 였 습 니 다. Replace Algorithm 의 대상.이 UML 그림 의 구 조 는 바로 전략 모델 의 전형 적 인 구조 이다.다음은 UML 그림 에 따라 그 에 상응하는 실현 을 제시 합 니 다.
우선 교체 알고리즘 에 대한 정 의 를 내 립 니 다.
//
class ReplaceAlgorithm
{
public:
virtual void Replace() = 0;
};
//
class LRU_ReplaceAlgorithm : public ReplaceAlgorithm
{
public:
void Replace() { cout<<"Least Recently Used replace algorithm"<<endl; }
};
class FIFO_ReplaceAlgorithm : public ReplaceAlgorithm
{
public:
void Replace() { cout<<"First in First out replace algorithm"<<endl; }
};
class Random_ReplaceAlgorithm: public ReplaceAlgorithm
{
public:
void Replace() { cout<<"Random replace algorithm"<<endl; }
};
이 어 Cache 의 정 의 를 내 렸 다. 여기 서 관건 적 인 것 은 Cache 의 실현 방식 이 고객 의 사용 방식 에 직접적인 영향 을 주 었 고 그 관건 은 교체 알고리즘 을 어떻게 지정 하 느 냐 에 있다.
방식 1: 매개 변 수 를 통 해 특정 알고리즘 의 지침 을 직접 지정 합 니 다.
//Cache
class Cache
{
private:
ReplaceAlgorithm *m_ra;
public:
Cache(ReplaceAlgorithm *ra) { m_ra = ra; }
~Cache() { delete m_ra; }
void Replace() { m_ra->Replace(); }
};
만약 이런 방식 을 사용한다 면 고객 은 이 알고리즘 들 의 구체 적 인 정 의 를 알 아야 한다.아래 와 같은 방식 으로 만 사용 할 수 있어 디 테 일이 너무 많이 노출 된 것 을 볼 수 있다.
int main()
{
Cache cache(new LRU_ReplaceAlgorithm()); //
cache.Replace();
return 0;
}
방식 2: 매개 변 수 를 통 해 직접 지정 합 니 다. 포인터 가 아 닌 탭 입 니 다.이렇게 하면 고객 은 알고리즘 에 해당 하 는 라벨 만 알 면 되 고 알고리즘 의 구체 적 인 정 의 를 알 필요 가 없다.
//Cache
enum RA {LRU, FIFO, RANDOM}; //
class Cache
{
private:
ReplaceAlgorithm *m_ra;
public:
Cache(enum RA ra)
{
if(ra == LRU)
m_ra = new LRU_ReplaceAlgorithm();
else if(ra == FIFO)
m_ra = new FIFO_ReplaceAlgorithm();
else if(ra == RANDOM)
m_ra = new Random_ReplaceAlgorithm();
else
m_ra = NULL;
}
~Cache() { delete m_ra; }
void Replace() { m_ra->Replace(); }
};
방식 에 비해 이런 방식 은 사용 하기에 훨씬 편리 하 다.사실은 이런 방식 은 간단 한 공장 모델 과 전략 모델 을 결합 시 켰 고 알고리즘 의 정 의 는 전략 모델 을 사 용 했 으 며 Cache 의 정 의 는 간단 한 공장 모델 을 사용 했다.
int main()
{
Cache cache(LRU); //
cache.Replace();
return 0;
}
위의 두 가지 방식 은 구조 함수 가 모두 형 삼 이 필요 하 다.구조 함 수 는 인 자 를 사용 하지 않 아 도 됩 니까?세 번 째 실현 방식 을 제시 하 겠 습 니 다.
방식 3: 템 플 릿 을 이용 하여 실현 합 니 다.알고리즘 은 템 플 릿 의 실제 인삼 을 통 해 지정 합 니 다.물론 인 자 를 사 용 했 습 니 다. 구조 함수 의 인자 가 아 닙 니 다.전략 모드 에서 매개 변수의 전달 은 피하 기 어렵 고 고객 은 반드시 특정한 알고리즘 을 지정 해 야 한다.
//Cache
template <class RA>
class Cache
{
private:
RA m_ra;
public:
Cache() { }
~Cache() { }
void Replace() { m_ra.Replace(); }
};
사용 방식 은 다음 과 같 습 니 다.
int main()
{
Cache<Random_ReplaceAlgorithm> cache; //
cache.Replace();
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Visual Studio에서 파일 폴더 구분 (포함 경로 설정)Visual Studio에서 c, cpp, h, hpp 파일을 폴더로 나누고 싶었습니까? 어쩌면 대부분의 사람들이 있다고 생각합니다. 처음에 파일이 만들어지는 장소는 프로젝트 파일 등과 같은 장소에 있기 때문에 파일...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.