策略设计模式:父类持有接口成员变量,动态设定接口成员实现类,动态改变方法

Duck抽象父类:

package com.franky.strategy;

/**
 * 策略设计模式
 * 定义Duck鸭子抽象类
 * @author Administrator
 *
 */
public abstract class Duck {
	
	/**
	 * 内部持有飞行行为(FlyBehavior)的接口对象 
	 */
	private FlyBehavior flyBehavior;
	/**
	 * 内部持有呱呱叫行为(QuackBehavior)的接口对象 
	 */
	private QuackBehavior quackBehavior;
	
	/**
	 * 默认的构造方法
	 */
	public Duck() {
		//默认Duck类不具备飞行的方法
		this.flyBehavior = new FlyNoWay();
		//默认Duck类具备呱呱叫的方法
		this.quackBehavior = new Quack();
	}
	

	/**
	 * 可在生成Duck的实体子类后,动态设定其飞行类
	 * @param flyBehavior 飞行类
	 */
	public void setFlyBehavior(FlyBehavior flyBehavior) {
		this.flyBehavior = flyBehavior;
	}

	/**
	 * 可在生成Duck的实体子类后,动态设定其呱呱叫类
	 * @param quackBehavior 呱呱叫类
	 */
	public void setQuackBehavior(QuackBehavior quackBehavior) {
		this.quackBehavior = quackBehavior;
	}

	/**
	 * 可能特有的飞行方法performFly 
	 * 子类内部实现为  flyBehavior.fly();
	 */
	public abstract void performFly();
	/**
	 * 可能特有的呱呱叫方法
	 * 子类内部实现为  quackBehavior.quack();
	 */
	public abstract void performQuack();

	/**
	 * 公共的游泳方法swim
	 * 子类可任意进行内部实现
	 */
	public abstract void swim();
	
	/**
	 * 公共的外形方法display
	 * 子类可任意进行内部实现
	 */
	public abstract void display();
}

飞行行为接口类:

package com.franky.strategy;

/**
 * 飞行行为接口FlyBehavior
 * @author Administrator
 *
 */
public interface FlyBehavior {
	void fly();
}

呱呱叫行为接口类:

package com.franky.strategy;

/**
 * 呱呱叫行为接口QuackBehavior
 * @author Administrator
 *
 */
public interface QuackBehavior {
	void quack();
}

无法飞行的行为类:

package com.franky.strategy;

/**
 * 无法飞行的行为类,实现FlyBehavior接口
 * @author Administrator
 *
 */
public class FlyNoWay implements FlyBehavior {

	@Override
	public void fly() {
//		可以什么都不做,这样就不会体现飞行的方法了
//		System.out.println("不能飞行!");
	}

}

能够飞行的行为类:

package com.franky.strategy;

/**
 * 能够飞行的行为类,实现FlyBehavior接口
 * @author Administrator
 *
 */
public class FlyWithWings implements FlyBehavior {

	@Override
	public void fly() {
		System.out.println("可以飞行哦!");
	}

}

无法呱呱叫的行为类:

package com.franky.strategy;

/**
 * 无法呱呱叫的行为类,实现QuackBehavior接口
 * @author Administrator
 *
 */
public class MuteQuack implements QuackBehavior {

	@Override
	public void quack() {
//		可以什么都不做,这样就无法体现出呱呱叫的行为了
//		System.out.println("不能叫!");
	}

}

能够呱呱叫的行为类:

package com.franky.strategy;

/**
 * 可以呱呱叫的行为类,实现QuackBehavior接口
 * @author Administrator
 *
 */
public class Quack implements QuackBehavior {

	@Override
	public void quack() {
		System.out.println("可以呱呱叫哦!");
	}

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值