실례 설명 정책 모드
최근 에 일이 많 지 않 아서 기 대 했 던 디자인 모델 을 배 울 시간 을 내 서 졸업 한 지 1 년 밖 에 안 된 개발 자로 서 디자인 모델 을 더 알 아 봐 야 한다.
이 글 은 전략 모델 에 대해 총 결 을 하 였 으 니 여러분 에 게 도움 이 되 기 를 바 랍 니 다.
(주제: 전략 모델 은 정의 와 간단 한 예 만 보 았 을 뿐 마지막 안개 가 낀 것 을 전혀 몰 랐 습 니 다. 하지만 아래 의 작은 예 는 재 미 있 습 니 다. 전략 모델 이 무엇 인지 잘 이해 할 수 있 습 니 다.)
사례
액 션 모험 게임 을 설계 합 니 다. 게임 은 대개 이 렇 습 니 다. 게임 에는 서로 다른 캐릭터 가 있 고 캐릭터 마다 전투 할 때 사용 하 는 무기 가 다 릅 니 다.현재 두 캐릭터: 기사 (Knight) 와 트 롤 머리 (Troll), Knight 의 무 기 는 보검 (Sword), 트 롤 머리 무 기 는 도끼 (Axe);작전 규칙 은 먼저 신분 을 확정 하고 무 기 를 사용 하여 작전 을 하 며 마지막 으로 작전 을 정지한다.
1. 분석:
Knight 와 Troll 은 모두 캐릭터 이기 때문에 초 클래스 Character 를 정의 할 수 있 습 니 다.
캐릭터 의 신원 확인, 무기 사용, 작전 정지, 작전 정지 모두 Character 류 가 가지 고 있 는 방법:
(1) 각 캐릭터 의 신분, 무기 로 작전 하 는 방식 이 다 르 기 때문에 Character 에서 추상 적 인 방법 (abstract) 으로 정의 하고 하위 클래스 Knight 와 Troll 에서 구체 적 으로 실현 한다.
(2) 작전 을 정지 하 는 것 은 정지 동작 이기 때문에 character 에서 하위 클래스 의 계승 을 직접 실현 하면 된다.
2. 상기 분석 코드 에 따라 실현 (기본 적 인 OO 디자인 원칙: 계승, 추상):
캐릭터 클래스 (초 클래스):
public abstract class Character {
public abstract void identify();
public abstract void fight();
public void stopFight(){
System.out.println("Hi,stop fight and go to sleep,now");
}
}
기사 류 (하위):
public class Knight extends Character{
//
public void identify() {
System.out.println("Hi,everybody,I am a handsome Knight");
}
//
public void fight() {
System.out.println("I fight with Sword the King give me");
}
}
트 롤 두류 (하위):
public class Troll extends Character{
public void identify() {
System.out.println("I am a Troll,I want to control the entire universe");
}
public void fight() {
System.out.println("My axe never relented");
}
}
3. 요약:
이때 의 프로 그래 밍 은 OO 디자인 에서 의 계승 과 추상 적 인 원칙 을 만족 시 켰 다. 그러나 후기 에 더 많은 역할 을 추가 해 야 한다 면 모든 캐릭터 가 사용 하 는 무기 가 다 르 거나 원래 의 캐릭터 가 사용 하 는 무 기 를 바 꿔 야 한다 고 생각해 보 자.일부 캐릭터 가 실행 중 무 기 를 교체 할 수 있 도록 설정 하면 프로그램의 유지 에 어려움 이 증가 합 니 다.
4. 재 분석:
모든 캐릭터 에 게 서로 다른 무 기 를 사용 하여 작전 을 하 는 것 은 하나의 행위 에 속한다. 상기 디자인 이 실현 하 는 방식 은 캐릭터 류 가 자신의 행 위 를 스스로 집행 하 는 것 이다. 그러면 여러 캐릭터 가 있 을 때 코드 가 지루 하고 통제 하기 어렵 고 독립 성 이 없다.
차라리 우리 가 변화 하 는 행 위 를 꺼 내 서 지 정 된 클래스 에 단독으로 봉 하고 인터페이스의 형식 으로 정의 하여 각 캐릭터 클래스 에서 해당 하 는 행 위 를 실현 하고 처리 하 는 것 이 낫다.이렇게 하면 후기 에 변화 하 는 것 이 다른 변 하지 않 게 할 수 있다.
5. 상기 분석 에 따라 정리 코드 를 제시 합 니 다 (OO 디자인 의 패 키 징 과 다 형 을 나 타 냈 습 니 다).
캐릭터 클래스 (초 클래스):
public abstract class Character {
// WeaponBehavior
protected WeaponBehavior weaponBehavior;
//
public Character(){
}
// fight , WeaponBehavior
public void fight(){
weaponBehavior.useWeanpon();
}
// ,
public abstract void identify();
// ,
public void stopFight(){
System.out.println("Hi,stop fight and go to sleep,now");
}
// ,
public void setWeaponBehavior(WeaponBehavior weaponBehavior) {
this.weaponBehavior = weaponBehavior;
}
}
하위 클래스 - 기사 클래스:
public class Knight extends Character{
// ,
public Knight(){
//
weaponBehavior = new Sword();
}
//
public void identify() {
System.out.println("Hi,everybody,I am a handsome Knight");
}
}
하위 클래스 - 트 롤 두류:
public class Troll extends Character{
// ,
public Troll(){
//
weaponBehavior = new Axe();
}
public void identify() {
System.out.println("I am a Troll,I want to control the entire universe");
}
}
분 리 된 행동 정의 추상 클래스:
public interface WeaponBehavior {
public void useWeanpon();
}
행위 추상 류 의 실현 류 중 하나 인 보검 을 사용 하 는 실현 류:
public class Sword implements WeaponBehavior{
public void useWeanpon() {
System.out.println("Sword");
}
}
행위 추상 류 의 실현 류 2 - 도끼 를 사용 하 는 실현 류:
public class Axe implements WeaponBehavior{
public void useWeanpon() {
System.out.println("Axe");
}
}
행위 추상 류 의 실현 류 의 3 - 새로 추 가 된 화살 실현 류:
public class BowAndArrow implements WeaponBehavior{
public void useWeanpon() {
System.out.println("Bow and Arrow");
}
}
주 방법 호출 테스트:
// --
Character king = new King();
king.identify();
//
king.fight();
king.stopFight();
// --
Character knight = new Knight();
knight.identify();
//
knight.fight();
knight.stopFight();
//
knight.setWeaponBehavior(new BowAndArrow());
knight.fight();
knight.stopFight();
실행 결과:
:
I am the king of all
Sword
Hi,stop fight and go to sleep,now
:
Hi,everybody,I am a handsome Knight
Sword
Hi,stop fight and go to sleep,now
Bow and Arrow
Hi,stop fight and go to sleep,now
2. 관찰자 모델 결합 사례 에 대한 정리
1. 각 캐릭터 마다 하나의 WeaponBehavior 를 가지 고 서로 다른 무기 사용 작전 을 의뢰 합 니 다. 사실 이것 은 바로 UML 의 조합 (composition) 관계 로 곧 두 가 지 를 결합 하여 사용 할 것 이다. 2. 캐릭터 의 행 위 는 한 그룹 에 포함 되 고 쉽게 확장 되 고 바 뀔 수 있 으 며 심지어 운행 할 때 행 위 를 바 꿀 수 있다. 3. 나타 난 OO 의 포장 (가 변 적 인 행위 의 포장 유형), 추상, 계승, 다 형;
3. 예 에서 나타 난 OO 디자인 중의 일부 디자인 원칙
설계 원칙: 1. 패 키 징 변화: 응용 에서 변화 가 필요 할 수 있 는 부분 을 찾 아 독립 시 키 고 변화 가 필요 없 는 코드 와 섞 이지 마 세 요. (1) 변화 할 수 있 는 부분 을 '포장' 하여 변화 가 필요 없 는 다른 부분 이 변화 부분의 영향 을 받 지 않도록 한다. (2) 장점: 코드 변화 로 인 한 부주의 한 결과 가 적어 지고 시스템 이 더욱 탄력 적 으로 변 한다. 2. 인터페이스 프로 그래 밍 에 대해 프로 그래 밍 을 실현 하지 않 는 다. (1) 인터페이스 프로 그래 밍 에 대한 진정한 의 미 는 초 유형 (supertype) 프로 그래 밍 이다. (2) 관건: 다 태 활용; (3) 특정한 종 류 는 이러한 종류 나 하위 클래스 에 정의 되 지 않 고 가 변 적 인 행동 동작 인 '위탁 (delegate)' 의 다른 종 류 를 처리 합 니 다. 3. 조합 을 많이 사용 하고 계승 을 적 게 사용한다. (1) 조합 장점 사용: 시스템 을 더욱 탄력 있 게 하고 알고리즘 족 (한 조 의 행위) 을 클래스 로 포장 할 수 있 을 뿐만 아니 라 실행 시 동적 액 변경 행위 (알고리즘) 를 수행 합 니 다.
4. 본 고의 중점 - 전략 모델 의 정의:
**첫 번 째 디자인 모델: 전략 모델 (Strategy pattern) 공식 정의: 전략 모델 은 알고리즘 족 을 정의 하고 각각 밀봉 하여 그들 사이 에 서로 바 꿀 수 있 도록 합 니 다. 이 모델 은 알고리즘 의 변 화 를 알고리즘 을 사용 하 는 고객 에 게 독립 시 킵 니 다. 디자인 모델 의 장점 학습: 1. 사고 구조의 차원 을 모델 차원 으로 향상 시 킬 수 있 고 사소한 대상 에 만 머 무 르 지 않 는 다. 2. 모델 은 더 적은 어휘 로 충분 한 의사 소통 을 할 수 있 습 니 다. 3. 유지 가능 한 OO 시스템 을 구축 하려 면 시스템 이 앞으로 필요 로 할 변화 와 변화 에 대처 하 는 원칙 을 수시로 생각 하 는 것 이 중요 하 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python 함수 설명 (1)의미: 함 수 를 설명 할 때 괄호 에 들 어 갈 매개 변 수 를 정의 하고 함 수 를 호출 할 때 매개 변 수 를 입력 해 야 합 니 다. 함수 명 을 통 해 이 함 수 를 호출 할 때 인자 cook ('훠 궈')...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.