软件设计模式——用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();
	}
}

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

猜你喜欢

转载自blog.csdn.net/m0_55887872/article/details/121324927