策略模式学习1:
从简单的模拟鸭子应用做起:
SimUDuck.游戏中会出现各种鸭子,一边游泳,一边呱呱叫。
首先通常的设计,设计一个鸭子超类,所有的鸭子都会呱呱叫,也会游泳,由超类负责处理这部分的行为实现代码。
代码分别如下:
这是一个鸭子超类
public abstract class Duck {
public void quack() {
System.out.println("呱呱叫...");
}
public void swim() {
System.out.println("游来游去...");
}
abstract void display();// 每种鸭子的外观更不同,所以设定为抽象的
/*
* 某一天需求变了,某些鸭子要会飞。
* 因此设计想到在超类中加入了这个方法,那么所有的鸭子都具备了会飞的行为。
*/
void fly(){
System.out.println("飞来飞去...");
}
//鸭子的其他方法
}鸭子子类们:
/**
* 绿头鸭
* @author Administrator
*
*/
public class MallardDuck extends Duck {
@Override
void display() {
System.out.println("绿头鸭..");
}
}/**
* 红头鸭
* @author Administrator
*
*/
public class RedheadDuck extends Duck {
@Override
void display() {
System.out.println("红头鸭...");
}
}
/**
* 橡皮鸭
* @author Administrator
*
*/
public class RubberDuck extends Duck {
@Override
void display() {
System.out.println("橡皮鸭...");
}
/*
* 橡皮鸭子不会呱呱叫
* 但是问题来了,这个橡皮鸭子会飞?
* 那设计人员会说:一样覆盖掉就好
*/
@Override
public void quack() {
//覆盖超类的呱呱叫
System.out.println("吱吱叫...");
}
@Override
void fly() {
//覆盖,变成什么事儿都不做
;
}
}这样设计就是最通常的设计了,如果需求不变,那这样设计就没有什么缺点了。

被折叠的 条评论
为什么被折叠?



