디자인 모드 의 전략 모드 (인터페이스 프로 그래 밍)

15875 단어 디자인 모드
프로 그래 밍 의 폐단 을 실현 하기 위해
간단 한 동물 계 의 예 를 들 어 우 리 는 다음 과 같은 요 소 를 포함 하 는 코드 를 써 야 한다. 오리 류, 오리 의 몇 가지 종류, 몇 가지 방법 을 실현 해 야 한다.일반적인 프로 그래 밍 사고: 1. 오리 류 Duck 을 쓰 고 몇 가지 방법 을 쓴다. 예 를 들 어 오리 가 비행 하 는 방법 fly (), 오리 가 우 는 방법 quack () 이다.2. 오리 의 종류, 예 를 들 어 녹색 머리 오리 MallardDuck, Duck 류 를 계승 합 니 다.3. 하위 클래스 에서 상기 두 가지 방법 을 다시 쓴다.이러한 프로 그래 밍 사고의 단점: 1. 코드 가 복잡 하 다. 코드 의 양 이 적 고 코드 가 안정 적 이 며 변경 되 지 않 은 상황 에서 문제 가 없 을 것 같 으 며 실제 프로그램 을 실행 할 때 도 전혀 틀 리 지 않 을 것 이다.그러나 우리 가 오리 의 수 를 늘 려 만 종의 오리 류 로 늘린다 고 가정 하면 우 리 는 만 번 의 방법 을 다시 써 야 하지 않 을 까?분명히 이것 은 매우 힘 든 것 이다.또한, 우리 가 fly () 방법 을 만 번 호출 한다 고 가정 하면, 만 번 호출 된 프로그램 을 써 야 합 니까?즉, 대상 명. fly ().이것 도 코드 의 번 거 로 움 을 초래 할 수 있다.2. 변경 성 이 약 합 니 다. 만약 에 당신 이 만 가지 오리 류 를 쓰기 로 결 심 했 고 거의 다 쓸 때 사장 님 께 서 말씀 하 셨 습 니 다. 이 fly () 방법 은 이렇게 쓰 지 말 아야 합 니 다. 고 쳐 야 합 니 다. 당신 은 곧 무 너 질 것 입 니 다. 코드 는 거의 죽 을 것 입 니 다. 변경 할 수 없습니다!간단 한 분석: 이런 유형의 코드 는 하 드 코드 에 속 하기 때문에 쓸 때 코드 의 양 이 복잡 할 뿐만 아니 라 다 쓴 후에 거의 움 직 일 수 없 기 때문에 현재 소프트웨어 가 버 전 을 계속 업데이트 해 야 하 는 요구 에 적응 하지 못 하고 우리 가 프로 그래 밍 방향 을 바 꿔 야 한다.
인터페이스 프로 그래 밍 도입
우 리 는 하나하나 이 문제 들 을 해결 했다.1. 코드 가 복잡 한 문 제 를 해결 합 니 다. 코드 의 양 을 줄 이 는 가장 좋 은 방법 은 같은 코드 의 재 활용 입 니 다. 만 가지 오리 중 일부 오리 의 fly () 방법 (행위) 이 일치 하 다 고 가정 하면 우 리 는 중복 되 는 글 씨 를 줄 일 수 있 습 니 다.fly () 는 여러 곳 에서 재 활용 되 는 요 구 를 만족 시 켜 야 할 뿐만 아니 라 특수 하 게 실현 할 수 있 는 요 구 를 만족 시 켜 야 한다. 그래서 우 리 는 이런 비행 행 위 를 단독으로 꺼 내 오리 류 에서 벗 어 나 인터페이스 fly Behavior 를 써 서 fly () 방법 을 그의 구성원 으로 만 들 수 있다. fly () 방법 은 여기 서 추상 적 인 방법 이 고 사례 화 는 반드시 내용 을 고 쳐 야 한다.그 다음 에 우 리 는 몇 가지 하위 클래스 를 써 서 fly Behavior 인 터 페 이 스 를 계승 하고 행위 방법 fly () 를 실현 한 다음 에 필요 할 때 실례 적 으로 호출 하면 된다.이것 은 아직 만 번 의 호출 방법의 코드 번 거 로 운 문 제 를 해결 하지 못 한 것 같 습 니 다. 만 개의 대상, 만 개의 대상 명. fly () 는 비 현실 적 입 니 다. 우리 가 원 하 는 Duck. fly () 입 니 다.해결 방법 은 대상 을 만 들 때 하위 대상 을 부모 클래스 로 전환 시 키 고 부모 클래스 의 인용 을 통 해 이불 류 를 재 작성 하 는 방법 을 호출 하 는 것 이다. 그러면 이 문제 도 해결 된다.2. 변경 성 이 약 한 문 제 를 해결 합 니 다. 이 문 제 는 상술 한 방법 으로 해결 되 었 습 니 다. 우 리 는 fly () 방법의 내용 을 수정 하고 해당 하 는 행위 류 에서 수정 하면 됩 니 다. 조작 하기에 편리 합 니 다.다른 행위, 예 를 들 어 quack () 행위 도 인터페이스 로 할 수 있다.그 밖 에 우 리 는 다른 일 도 할 수 있다. 예 를 들 어 오리 비행 행위 의 동태 적 인 변경 을 실현 할 수 있다. 오리 류 에 set 방법 을 쓰 고 fly Behavior 의 인용 을 수정 하여 fly Behavior 가 서로 다른 fly () 방법 을 호출 하여 프로그램 운행 에서 비행 매개 변수 와 비행 자 세 를 다 중 으로 수정 하도록 한다.소결: 이상 은 인 터 페 이 스 를 대상 으로 프로 그래 밍 하 는 특징 을 나 타 냈 다. 1. 반복 적 으로 사용 되 는 행 위 는 인터페이스 로 추상 화 되 고 인터페이스의 다 중 실현 을 이용 하여 행 위 를 많이 실현 한다.2. 행위 의 반복 적 인 재 작성 은 이미 실 현 된 행위 에 대한 여러 번 호출 으로 바 뀌 었 다.3. 부계 대상 이 자 류 를 호출 하 는 방법 은 자동 전환 의 사상 을 나 타 냈 다.4. 다 태 를 실현 했다.
인터페이스 프로 그래 밍 실천
1. Duck 클래스:
public abstract class Duck {
	 FlyBehavior flyBehavior;
	 QuackBehavior quackBehavior;	 
	 /**
	  *      
	  */
	 public abstract void display();	 
	 /**
	  *      
	  */
	 public void isDuck()
	 {
		 System.out.println("    ");
	 }	 
	 /**
	  *        
	  */
	 public void flyPerfrom()
	 {
		 flyBehavior.fly();
	 }	
	 /**
	  *       
	  */
	 public void quackPerform()
	 {
		 quackBehavior.quack();
	 }
		 /**
	  *        
	  * @param flyBehavior
	  */
	 public void setFlyBehavior(FlyBehavior flyBehavior)
	 {
		 this.flyBehavior=flyBehavior;
	 }	
	 /**
	  *       
	  * @param quackBehavior
	  */
	 public void setQuackPerform(QuackBehavior quackBehavior)
	 {
		 this.quackBehavior=quackBehavior;
	 }	 
}

2. 녹색 머리 오리 종류:
public class MallardDuck extends Duck{
	/**
	 *       
	 *        
	 */
	@Override
	public void display() {		
		System.out.println("     ");		
	}
	/**
	 *     
	 *          
	 */
	public MallardDuck()
	{
		flyBehavior=new FlyWithWing();
		quackBehavior=new Quack();
	}	
}

3. 비행 행위 인터페이스:
public interface FlyBehavior {
	public abstract void fly();	
}

4. 오리 소리 행위 인터페이스:
public interface QuackBehavior {
    public abstract void quack();
}

5. 두 가지 비행 행위 의 실현 유형:
public class FlyWithWing implements FlyBehavior{
	@Override
	public void fly() {		
		System.out.println("     ");		
	}
}
public class FlyNoWing implements FlyBehavior{
	@Override
	public void fly() {		
		System.out.println("    ,    ");		
	}			
}

6. 오리 우 는 행위 의 실현 유형:
public class Quack implements QuackBehavior{
	@Override
	public void quack() {	
		System.out.println("      ");		
	}	
}

7. 테스트 클래스:
	public static void main(String[] args)
	{
		Duck duck = new MallardDuck();
		duck.flyPerfrom();//       
		duck.quackPerform(); //       
		duck.display();  //      
		duck.isDuck();  //         		
		duck.setFlyBehavior(new FlyNoWing());//     
		duck.flyPerfrom(); //      
	}

8. 운행 결과: 날개 로 푸 른 머리 오 리 를 날 아 다 니 는 울 음소 리 는 푸 른 머리 오리 입 니 다. 저 는 오리 입 니 다. 날개 가 없어 서 날 지 못 합 니 다. 9. 분석: 저 는 세 가지 서로 다른 방법 에 대해 서로 다른 처 리 를 했 습 니 다. 행위 방법 에 대해 인터페이스 로 바 꾸 었 습 니 다.오리 의 통용 방법, 예 를 들 어 상기 오리 의 신분 에 대한 판단 은 오리 류 에서 직접 구체화 되 고 자 류 를 계승 하여 직접 사용한다.모든 오리 의 서로 다른 속성, 예 를 들 어 외관 display () 는 추상 적 인 방법 으로 모든 하위 클래스 가 실현 되 어야 한다.행위 방법의 인터페이스 화 는 인 터 페 이 스 를 대상 으로 프로 그래 밍 을 실현 했다. 또한 오리 류 에서 인터페이스의 대상 을 먼저 밝 힌 다음 에 perform 방법 으로 인터페이스 대상 이 추상 적 인 방법 에 대한 호출 을 썼 다. 오리 대상 을 실례 화하 기 전에 이런 인용 은 그 어떠한 구체 적 인 내용 도 가리 키 지 않 았 다. 실례 화 된 후에 인터페이스 대상 은 구체 적 으로 실현 되 는 추상 적 인 방법 을 가리 키 면 호출 할 수 있다.사례 에서 우 리 는 프로그램 운영 에서 오리 의 비행 행위 에 대한 수정 을 실현 했다. 이런 사상 은 우리 가 사격 게임 을 하 는 과정 에서 무 기 를 전환 하 는 것 과 비교 할 수 있다. 서로 다른 무 기 는 하나의 알고리즘 족 에서 무기 인 터 페 이 스 를 공동으로 실현 할 수 있다.
전략 모드 의 몇 가지 원칙
이상 에서 우리 가 배 운 것 은 바로 디자인 모델 중의 전략 모델 이다. 우 리 는 디자인 모델 을 사용 하 는 것 을 배 웠 다. 그 다음 에 저 는 전략 모델 과 관련 된 몇 가지 OO 원칙 을 정리 해 드 리 겠 습 니 다. 1. 응용 에서 자주 변화 해 야 할 부분 을 찾 아 독립 적 으로 '패키지' 를 해서 변화 가 필요 없 는 코드 와 혼합 되 지 않도록 하 겠 습 니 다.2. 프로 그래 밍 을 실현 하 는 것 이 아니 라 인터페이스 프로 그래 밍 을 대상 으로 한다.3. 조합 을 많이 사용 하고 계승 을 적 게 사용한다.전략 모델 은 알고리즘 족 을 정의 했다.

좋은 웹페이지 즐겨찾기