设计模式中有一个原则,就是针对接口编程或者叫针对超类型编程。程序针对超类编程,执行时会根据实际类型执行到真正的行为,不要绑死在具体的类型上。
public class Main {
public static void main(String[] args) throws UnsupportedEncodingException {
Dog dog = new Dog();//针对实现编程
Animal animal = new Dog();//针对接口/超类编程
Animal animal2 = getAnimal(1);//我不管对象是狗,还是猫,我只要知道它有doSomething()的行为,利用Animal进行多态调用。
animal2.doSomething();
}
public static Animal getAnimal(int type){
if(1 == type){
return new Dog();
}else if(2 == type){
return new Cat();
}else{
throw new IllegalArgumentException("非法类型");
}
}
}
class Animal{
public void doSomething(){
}
}
class Cat extends Animal{
@Override
public void doSomething() {
System.out.println("cat do!");
}
}
class Dog extends Animal{
@Override
public void doSomething() {
System.out.println("dog do!");
}
}