软件设计模式——用Java代码实现物种特征

题目:某游戏公司现欲开发一款面向儿童的模拟游戏,该游戏主要模拟现实世界中各种鸭子的发声特征、飞行特征和外观特征。
游戏需要模拟的鸭子种类及其特征如下表所示。
在这里插入图片描述
首先定义三个接口:

  • 发声特征
public interface Sound {
	public abstract void playSound();
}
  • 飞行特征
public interface Fly {
	public abstract void flySpecies();
}
  • 外观特征
public interface Appearence {
	public abstract void AprSpecies();
}

然后根据三个接口实现每种特征(接口)的不同类型(方法),即方法重写。

  • 发声特征的三种类型(方法)
public class Quack implements Sound{
	public void playSound() {
		System.out.println("嘎嘎...嘎嘎");
	}
}
public class QuackNoWay implements Sound{
	public void playSound() {
		System.out.println("不发声");
	}
}
public class Squeak implements Sound{
	public void playSound() {
		System.out.println("发出橡皮与空气摩擦声");
	}
}
  • 飞行特征的两种类型(方法)
public class FlyWithWings implements Fly{
	public void flySpecies() {
		System.out.println("翅膀飞行");
	}
}
public class FlyNoWay implements Fly{
	public void flySpecies() {
		System.out.println("不能飞行");
	}
}
  • 外观特征的四种类型(方法)
public class MallardDuckApr implements Appearence{
	public void AprSpecies() {
		System.out.println("灰色羽毛");
	}
}
public class RedHeadDuckApr implements Appearence{
	public void AprSpecies() {
		System.out.println("灰色制毛-红头");
	}
}
public class CottonDuckApr implements Appearence{
	public void AprSpecies() {
		System.out.println("白色");
	}
}
public class RubherDuckApr implements Appearence{
	public void AprSpecies() {
		System.out.println("黑白橡皮色");
	}
}

实现三种特征(接口)的不同类型(方法)后,创建四个类,实现四种鸭子的各个特征(方法)。

  • 灰鸭( MallardDuck)
public class MallardDuck{
	Sound sound;
	Fly fly;
	Appearence appearence;
	public void setSound(Sound sound) {
		this.sound=sound;
	}
	public void play() {
		if(sound!=null)
			sound.playSound();
		else
			System.out.println("没有可选择的声音");
	}
	public void setFly(Fly fly) {
		this.fly=fly;
	}
	public void species() {
		if(fly!=null)
			fly.flySpecies();
		else
			System.out.println("没有可选择的飞行特征");
	}
	public void setAppearence(Appearence appearence) {
		this.appearence=appearence;
	}
	public void apr() {
		if(appearence!=null)
			appearence.AprSpecies();
		else
			System.out.println("没有可选择的外观特征");
	}
}
  • 红头鸭(RedHeadDuck)
public class RedHeadDuck{
	Sound sound;
	Fly fly;
	Appearence appearence;
	public void setSound(Sound sound) {
		this.sound=sound;
	}
	public void play() {
		if(sound!=null)
			sound.playSound();
		else
			System.out.println("没有可选择的声音");
	}
	public void setFly(Fly fly) {
		this.fly=fly;
	}
	public void species() {
		if(fly!=null)
			fly.flySpecies();
		else
			System.out.println("没有可选择的飞行特征");
	}
	public void setAppearence(Appearence appearence) {
		this.appearence=appearence;
	}
	public void apr() {
		if(appearence!=null)
			appearence.AprSpecies();
		else
			System.out.println("没有可选择的外观特征");
	}
}
  • 棉花鸭(CottonDuck)
public class CottonDuck{
	Sound sound;
	Fly fly;
	Appearence appearence;
	public void setSound(Sound sound) {
		this.sound=sound;
	}
	public void play() {
		if(sound!=null)
			sound.playSound();
		else
			System.out.println("没有可选择的声音");
	}
	public void setFly(Fly fly) {
		this.fly=fly;
	}
	public void species() {
		if(fly!=null)
			fly.flySpecies();
		else
			System.out.println("没有可选择的飞行特征");
	}
	public void setAppearence(Appearence appearence) {
		this.appearence=appearence;
	}
	public void apr() {
		if(appearence!=null)
			appearence.AprSpecies();
		else
			System.out.println("没有可选择的外观特征");
	}
}
  • 橡皮鸭(RubherDuck)
public class RubherDuck{
	Sound sound;
	Fly fly;
	Appearence appearence;
	public void setSound(Sound sound) {
		this.sound=sound;
	}
	public void play() {
		if(sound!=null)
			sound.playSound();
		else
			System.out.println("没有可选择的声音");
	}
	public void setFly(Fly fly) {
		this.fly=fly;
	}
	public void species() {
		if(fly!=null)
			fly.flySpecies();
		else
			System.out.println("没有可选择的飞行特征");
	}
	public void setAppearence(Appearence appearence) {
		this.appearence=appearence;
	}
	public void apr() {
		if(appearence!=null)
			appearence.AprSpecies();
		else
			System.out.println("没有可选择的外观特征");
	}
}

最后创建一个类实现整个软件效果:

public class Application {
	public static void main(String[] args) {
		MallardDuck mallardDuck = new MallardDuck();
		System.out.printf("灰鸭的发声特征:");
		mallardDuck.setSound(new Quack());
		mallardDuck.play();
		System.out.printf("灰鸭的飞行特征:");
		mallardDuck.setFly(new FlyWithWings());
		mallardDuck.species();
		System.out.printf("灰鸭的外观特征:");
		mallardDuck.setAppearence(new MallardDuckApr());
		mallardDuck.apr();
		System.out.println("------------------------------");
		
		RedHeadDuck redHeadDuck = new RedHeadDuck();
		System.out.printf("红头鸭的发声特征:");
		redHeadDuck.setSound(new Quack());
		redHeadDuck.play();
		System.out.printf("红头鸭的飞行特征:");
		redHeadDuck.setFly(new FlyWithWings());
		redHeadDuck.species();
		System.out.printf("红头鸭的外观特征:");
		redHeadDuck.setAppearence(new RedHeadDuckApr());
		redHeadDuck.apr();
		System.out.println("------------------------------");
		
		CottonDuck cottonDuck = new CottonDuck();
		System.out.printf("棉花鸭的发声特征:");
		cottonDuck.setSound(new QuackNoWay());
		cottonDuck.play();
		System.out.printf("棉花鸭的飞行特征:");
		cottonDuck.setFly(new FlyNoWay());
		cottonDuck.species();
		System.out.printf("棉花鸭的外观特征:");
		cottonDuck.setAppearence(new CottonDuckApr());
		cottonDuck.apr();
		System.out.println("------------------------------");
		
		RubherDuck rubherDuck = new RubherDuck();
		System.out.printf("橡皮鸭的发声特征:");
		rubherDuck.setSound(new Squeak());
		rubherDuck.play();
		System.out.printf("橡皮鸭的飞行特征:");
		rubherDuck.setFly(new FlyNoWay());
		rubherDuck.species();
		System.out.printf("橡皮鸭的外观特征:");
		rubherDuck.setAppearence(new RubherDuckApr());
		rubherDuck.apr();
	}
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿_巴打

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值