示例:
需要设计猫和狗类,它们都有自己的名字,猫会喵喵叫,狗会汪汪叫
?抽象宠物类:
public abstract class Pet { //定义抽象类
private String name; //名字
public abstract void cry(); //发出叫声方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
猫类:
public class Cat extends Pet { //猫类,继承宠物抽象类
@Override
public void cry() { //重写方法
System.out.println(getName()+":喵喵喵~");
}
}
狗类:
public class Dog extends Pet{ //狗类,继承宠物抽象类
@Override
public void cry() { //重写方法
System.out.println(getName()+":汪汪汪~");
}
}
Test:
public class Test {
public static void main(String[] args) {
Pet c = new Cat();
c.setName("武斗酷猫");
c.cry(); //更好的支持多态
Pet d = new Dog();
d.setName("音速犬");
d.cry();
}
}
运行结果:
模板 方法设计模式解决了什么问题?
模板方法设计模式的写法
示例:
比如用模板方法设计模式完成刚才的问题
抽象宠物类:
public abstract class Pet { //定义抽象类
private String name; //名字
public void cry(){ //模板方法
System.out.print(getName()+"发出了");
voice(); //主体部分交给子类完成
System.out.println("的叫声");
}
public abstract void voice(); //发出叫声方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
?猫类:
public class Cat extends Pet { //猫类,继承宠物抽象类
@Override
public void voice() { //主体部分由子类确定发出什么声音
System.out.print("喵喵喵~");
}
}
狗类:
public class Dog extends Pet{ //狗类,继承宠物抽象类
@Override
public void voice() { //主体部分由子类确定发出什么声音
System.out.print("汪汪汪~");
}
}
Test:
public class Test {
public static void main(String[] args) {
Pet c = new Cat();
c.setName("武斗酷猫");
c.cry();
Pet d = new Dog();
d.setName("音速犬");
d.cry();
}
}
运行结果:
这个例题代码量太少可能看不出什么效果,当代码量多的时候就可以体现出减少重复代码的优势了?