模板设计模式的常见使用:
1.一个具体的流程时通常会使用,将流程变为抽象方法,留给不同的子类去实现;将流程封装为一个具体的方法去调用抽象方法;
2.当需要对子类掩藏一些方法时,我们就可以将流程方法写在抽象类中并且是具体的方法,这时就对影藏了实现的细节。
3.依赖java重写、重载,实现多态,多态体现就是可以依据传入的具体的子类实现对应的方法;
prisoner类:
public abstract class Prisoners {
protected String name;
abstract void eat();
abstract void work();
abstract void readnews();
//前面的为抽象方法,这些方法主要是每个人的不同点,需要去不同实现的;
//但是我们可以使用抽象类去模板设计,这也就是为什么抽象类是模板式的设计,;
//接口是策略式的或者是契约式的
public void life(){
eat();
work();
eat();
work();
eat();
readnews();
}//每个囚犯的吃,工作的方式可能不同,但是每个囚犯在监狱种的生活的作息规律是相同的,所以我们采用
//抽象类设计模板设计模
// 式
}
starprisoner类:
package com.javasc.review;
public class StarPrisoner extends Prisoners{
public StarPrisoner(String name){
this.name = name;
}
@Override
void eat() {
System.out.println(this.name + "在边唱歌便吃饭");
}
@Override
void work() {
System.out.println(this.name + "在边唱歌便劳动");
}
@Override
void readnews() {
System.out.println(this.name + "在边唱歌便读英文");
}
}
政治罪犯类:
public class PolicticalPrisoner extends Prisoners{
public PolicticalPrisoner(String name){
this.name = name;
}
@Override
void eat() {
System.out.println(this.name + "政治罪犯在吃饭");
}
@Override
void work() {
System.out.println(this.name + "政治罪犯在工作");
}
@Override
void readnews() {
System.out.println(this.name + "政治罪犯在度行文");
}
}
参观者类:
public class Visitor {
//面向接口编程
//参观者去体验罪犯的一天,此处主要是父类;
public void visit(Prisoners prisoners){
System.out.println("我开始体验罪犯的一天!");
prisoners.life();
System.out.println("体验结束!");
}
public static void main(String[] args) {
Visitor visitor = new Visitor();
Prisoners wyf = new StarPrisoner("吴亦凡");
visitor.visit(wyf);
Prisoners zk = new PolicticalPrisoner("周康");
visitor.visit(zk);
}
}