일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 전체
- 전자정부
- 가변인자
- 야구게임
- IBatis procedure
- while
- Login with OAuth Authentication
- 자바 야구게임
- 추상클래스
- 전체텍스트
- 로또
- angular2
- 형변환
- Full text
- 스프링
- 이클립스
- 상속예제
- 25가지 효율적인 sql작성법
- 페이징
- 자바
- full text indexing
- 업캐스팅
- 다운캐스팅
- jquery
- 다형성
- Validations
- 단축키
- 상속
- Random
- Today
- Total
nalaolla
스트래티지 패턴 예제 본문
//Strategy Pattern 스트래티지 패턴 예제
interface QuackBehavior { public void quack();
} // 공통 기능을 정의하는 인터페이스 (오리는 공통적으로 꽥꽥 거리는 행동을 한다)
/////////////////// Quack class ///////////////////
class Quack implements QuackBehavior { public void quack(){ System.out.println("꽥!"); } } // 인터페이스를 상속 받아서 꽥꽥 이라는 기능을 정의한다. (오버라이딩)
///////////////// MuteQuack class ////////////////////
class MuteQuack implements QuackBehavior { public void quack(){ System.out.println("조용!"); } }
//
//////////////////////////////////////////////////////////////
class RubberQuack implements QuackBehavior { public void quack(){ System.out.println("러버 꽥!!"); } }
//////////////////////////////////////////////////////////////
class RubberFlyBehavior implements FlyBehavior{
public void fly(){
System.out.println("러버~!");
}
}
//////////////////////////////////////////////////////////////
interface FlyBehavior { public void fly(); }
//////////////////////////////////////////////////////////////
class FlyWithMings implements FlyBehavior{
public void fly(){
System.out.println("날아간다~~!");
} }
//////////////////////////////////////////////////////////////
class FlyNoWay implements FlyBehavior{
public void fly(){
System.out.println("꼼짝~!");
}
}
//////////////////////////////////////////////////////////////
class Duck{
FlyBehavior fb; QuackBehavior qb;
public void performQuack(){
qb.quack();
}
public void performFly(){ fb.fly(); }
public void shotByGun(){ qb = new MuteQuack(); fb = new FlyNoWay(); }
void setFlyBehavior(FlyBehavior fb){
this. fb = fb;
}
}
//////////////////////////////////////////////////////////////
class MallardDuck extends Duck { MallardDuck(){ qb = new Quack(); fb = new FlyWithMings(); }; }
//////////////////////////////////////////////////////////////
class DecoyDuck extends Duck{
DecoyDuck(){
qb = new MuteQuack(); fb = new FlyNoWay(); }
}
//////////////////////////////////////////////////////////////
class RubberDuck extends Duck{
RubberDuck(){
qb = new RubberQuack(); fb = new RubberFlyBehavior(); }
}
//////////////////////////////////////////////////////////////
class FlyRocketPowered implements FlyBehavior {
public void fly(){ System.out.println("날아간다 슈웅~~!!!"); } }
class MiniDuckSimulator { public static void main(String[] args) {
Duck d[] = new Duck[10];
for(int i=0; i<10; i++){
int x = (int)(Math.random()*10);
if(x%3==0){
d[i]=new MallardDuck();
}else if(x%3==1){ d[i]=new DecoyDuck(); }else{ d[i]=new RubberDuck(); } /* Duck m = new MallardDuck(); Duck d = new DecoyDuck(); Duck r = new RubberDuck();
m.performQuack(); m.performFly();
d.performQuack(); d.performFly();
r.performQuack(); r.performFly(); */ }
d[3].shotByGun(); d[5].shotByGun(); d[9].shotByGun();
for(int j=0; j<10; j++){ System.out.println((j+1)+" 번째 오리가 꽥꽥거린다"); d[j].performQuack();}
System.out.println("\n");
for(int j=0; j<10; j++){ System.out.println((j+1)+" 번째 오리가 날아다닌다");
d[j].performFly();}
Duck r = new RubberDuck(); r.setFlyBehavior(new FlyRocketPowered()); System.out.println("\n"); r.performQuack(); r.performFly();
} }
|
'JAVA > 999. 디자인패턴' 카테고리의 다른 글
[디자인패턴] 추상 팩토리 패턴 (Abstract-Factory Pattern) (0) | 2020.04.09 |
---|---|
[디자인패턴] 팩토리 메소드 패턴 (Factory-Method Pattern) (0) | 2020.04.09 |
[디자인패턴] 데코레이터 패턴 (Decorator Pattern) (0) | 2020.04.09 |
[디자인패턴] 옵저버 패턴 (Observer Pattern) - Java 내장 객체 사용 (0) | 2020.04.09 |
[디자인패턴] 스트래티지 패턴 (Strategy Pattern) (0) | 2020.04.09 |