将所有类看作是一个小型的开发框架,主函数看作是用户程序,满足开闭原则,框架相对于用户的需求比较容易维护,当用户需要模拟其他动物的声音时,只需要简单的增加一个其他动物的类即可,而无须修改框架中的其他类。
package onlinejudge;
import java.util.Scanner;
class Simulator {//声音模拟器
public void playSound(Animal animal) {
System.out.print("现在播放" + animal.getAnimalName() + "类的声音:");
animal.cry();
}
}
abstract class Animal {//动物抽象类
public abstract void cry();
public abstract String getAnimalName();
}
/*
class Fog extends Animal{
public void cry() {
System.out.println("呱呱呱");
}
public String getAnimalName() {
return "蛙";
}
}*/
class Dog extends Animal {
public void cry() {
System.out.println("汪汪汪");
}
public String getAnimalName() {
return "狗";
}
}
class Cat extends Animal{
public void cry() {
System.out.println("喵喵喵");
}
public String getAnimalName() {
return "猫";
}
}
public class Main{
public static void main(String[] args) {
Simulator simulator = new Simulator();
simulator.playSound(new Dog());
simulator.playSound(new Cat());
//simulator.playSound(new Fog());
}
}