二 《Head First 设计模式》之策略

在我们的新设计中,鸭子的子类将使用接口(与)所表示的行为,所以实际的“实现”不会被绑死在鸭子的子类中 。(换句话说,特定的具体行为编写在实现了
与的类中) 。
实现鸭子的行为

二  《Head First 设计模式》之策略

文章插图
这样的设计,可以让飞行和呱呱叫的动作被其他对象复用,因为这些行为已经与鸭子无关了 。
也可以新增一些行为,不会影响到已有的行为类 。
这样的设计,有了继承的“复用”好处,却没有继承所带来的包袱 。
整合鸭子的行为
关键在于,鸭子现在会将飞行和呱呱叫的动作“委托”()别人处理,而不是直接使用定义在Duck类(或子类)内的呱呱叫和飞行方法 。
做法是这样的:
①、首先,在Duck类中加入两个实例变量,分别为“,与“",声明为接口类型(而不是具体类实现类型),每个鸭子对象都会动态地设置这些变量以在运行时引用正确的行为类型(例如:、
等) 。
二  《Head First 设计模式》之策略

文章插图
②、实现();
class Duck{
//为行为接口类型声明两个引用变量,所有鸭子子类都继承他们
or;
;
(){
//展示行为
(){
//委托给行为类
.fly();
(){
//委托给行为类
.quack();
③、设定、的实例变量 。类:
{
//构造器中出现针对实现编程:正在制造一个具体的Quack实现类的实例 。
//稍后会用方法解决这个问题
(){
=new Quack();
=();
【二《Head First 设计模式》之策略】(){
.out.("I'm a realduck");