策略模式学习1

策略模式学习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() {
		//覆盖,变成什么事儿都不做
		;
	}
		
}

这样设计就是最通常的设计了,如果需求不变,那这样设计就没有什么缺点了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值