模板设计模式的常见使用:

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);
    }

}