Head First 디자인 모델 - 전략 모델

3541 단어
전체 코드
       Duck.java
public abstract class Duck {
   public  FlyBehavior flyBehavior;

   public QuackBehavior quackBehavior;

   public Duck() {

   }

   public abstract void display();
   public void performFly() {

      flyBehavior.fly();
   }

   public void performQuack() {
      quackBehavior.quack();
   }

   public void setFlyBehavior(FlyBehavior fb) {
      flyBehavior = fb;
   }

   public void setQuackBehavior(QuackBehavior qb) {
      quackBehavior = qb;
   }

   public void swim() {
      System.out.println("All ducks float, even decoys!");
   }
}

      ModelDuck.java
public class ModelDuck extends Duck {

    public ModelDuck() {

       flyBehavior = new FlyNoWay();
       quackBehavior = new Quack();
    }

    public void display() {
       System.out.println("I’m a model duck");
    }
}

   
    ModelDuckSimulator.java
public class ModelDuckSimulator{
        public static void main(String args[]){
                Duck modelDuck = new ModelDuck();
                modelDuck.performFly();
                modelDuck.performQuack();
        }
}

        FlyBehavior.java
public interface FlyBehavior {
   public void fly();
}

       FlyNoWay.java
public class FlyNoWay implements FlyBehavior {
   public void fly() {
       System.out.println("I can’t fly");
   }
}

      FlyWithWings.java
public class FlyWithWings implements FlyBehavior {
   public void fly() {
         System.out.println("I’m flying!!");
   }
}

      QuackBehavior.java
public interface QuackBehavior {
   public void quack();
}

      Squeak.java
public class Squeak implements QuackBehavior {
   public void quack() {
              System.out.println("Squeak");
   }
}

      Quack.java
public class Quack implements QuackBehavior {
   public void quack() {
        System.out.println("Quack");
   }

}

      MuteQuack.java
public class MuteQuack implements QuackBehavior {
   public void quack() {
              System.out.println("<< Silence >>");
   }
}

해명
       1. 전략 모드 는 언제 사용 합 니까?
       답: 하나의 인터페이스 가 서로 다른 종류 에서 서로 다른 실현 을 할 때 전략 모델 을 고려 합 니 다.
       2. Squeak. 자바 코드 는 재 활용 할 수 있 습 니 다.한 클래스 에서 만 QuackBehavior 를 실현 한다 면 다른 클래스 가 실현 되 려 면 Squeak. java 코드 를 다시 사용 할 수 있 습 니 다.
       3. OO 원칙:
       패키지 변경:    Flyable 과 Quackable 인 터 페 이 스 는 처음에는 괜 찮 았 던 것 같 습 니 다. 문 제 를 해결 하 였 습 니 다. (날 아 가 는 오리 만 Flyable 을 계승 합 니 다) 하지만 자바 인 터 페 이 스 는 실현 코드 가 없 기 때문에 계승 인 터 페 이 스 는 코드 의 재 활용 에 이 르 지 못 합 니 다.이것 은 언제든지 어떤 행 위 를 수정 해 야 한 다 는 것 을 의미한다. 당신 은 이 행 위 를 정의 하 는 모든 종류 에서 그것 을 수정 해 야 한다. 조심 하지 않 으 면 새로운 오 류 를 초래 할 수 있다.그래서 이 부분의 코드 를 독립 시 켰 다.
       인터페이스 프로 그래 밍: flyBehavior. fly ();quackBehavior.quack();모두 인터페이스 프로 그래 밍 입 니 다.
       다 용도 조합 소 용 계승:
        Duck 류 의 이러한 유형 은 모두 조합 입 니 다. 다시 말 하면 한 가지 유형 에서 다른 유형의 방법 과 속성 을 사용 하고 싶 습 니 다. 하 나 는 계승 이 고 다른 하 나 는 조합 입 니 다.조합 을 많이 써 야 한다.
        public  FlyBehavior flyBehavior;         public QuackBehavior quackBehavior;
       4. 전략 모델: 알고리즘 족 을 정의 하고 각각 포장 하여 서로 바 꿀 수 있 도록 합 니 다. 이 모델 은 알고리즘 변 화 를 알고리즘 고객 에 게 독립 시 킵 니 다.

좋은 웹페이지 즐겨찾기