模板模式
1、概述
①定义
模板模式使用一个抽象类将各个具体类中相同或相近的成分抽取出来,并让各个具体类继承该抽象类,共享相同或相近的成分。具体类通过继承抽象类也可以重写模板类的方法。
②结构
UML图:
- Template为模板类,它是一个抽象类,集成了ConcreteClassA、ConcreteClassB、ConcreteClassC的相同部分:publicField属性,publicMethod()方法。
- ConcreteClassA、ConcreteClassB、ConcreteClassC为具体类,它们之间存在相同和不同的属性和方法。
2、实例分析
场景:
定义一个抽象类Animal,Animal中有eat()、sleep()方法。定义具体类Dog继承Animal类,并在Dog中定义shout()、lookHome()方法;定义具体类Cat继承Animal类,并在Cat中定义sound()、catchMouse()方法。
UML图:
代码:
/**
* @author Hanlin Wang
*/
public class TemplateMode {
public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
dog.eat();
dog.shout();
dog.lookHome();
dog.sleep();
System.out.println("
");
cat.eat();
cat.sound();
cat.catchMouse();
cat.sleep();
}
}
abstract class Animal{
public void eat(){
System.out.println("---吃---");
}
public void sleep(){
System.out.println("---睡---");
}
}
class Dog extends Animal{
public void shout(){
System.out.println("汪..汪..");
}
public void lookHome(){
System.out.println("看家");
}
}
class Cat extends Animal{
public void sound(){
System.out.println("喵..");
}
public void catchMouse(){
System.out.println("捉老鼠");
}
}
运行结果:
—吃—
汪..汪..
看家
—睡—
—吃—
喵..
捉老鼠
—睡—