模板方法模式

public class TemplateMethodPattern {

    public abstract class TemplateClass{
        private final void concreteMethod(){
            //System.out.println("you can't change this method!");
            System.out.println("您选择了必修课高等数学!组合数学!离散数学!概率论!");
        }
        public abstract void abstractMethod();
        public void defaultMethod(){
            System.out.println("默认您选择了Linux操作系统.你可以更改!");
        }
        public final void templateMethod(){
            concreteMethod();
            abstractMethod();
            defaultMethod();
        }
    }
    public class ConcreteClass1 extends TemplateClass{
        public void abstractMethod() {
            //System.out.println("this is concreteclass1's abstract method.");
            System.out.println("我选择数据挖掘!大数据!海量计算!");
        }
        public void defaultMethod(){
            //System.out.println("this is concreteclass1's default method.");
            System.out.println("我不想选择Linux操作系统!");
        }
    }
    public class ConcreteClass2 extends TemplateClass{
        public void abstractMethod() {
            //System.out.println("this is concreteclass1's abstract method.");
            System.out.println("我选择挖掘机与炒菜!美国动画片鉴赏!微博段子手!");
        }
    }
    public void test(){
        ConcreteClass1 class1 = new ConcreteClass1();
        class1.templateMethod();
        ConcreteClass2 class2 = new ConcreteClass2();
        class2.templateMethod();
    }
    public static void main(String[] args) {
        new TemplateMethodPattern().test();
    }
}

模板方法模式适合那种提供基本框架、骨架、模板、大体功能的那种应用;然后具体子类去完善补充或者修改(修改你能修改的东西)

以选课系统为例,所有学生的选课可以看成是一个模板方法,包括必修课,默认课和选修课,

1.必修课是子类必须得服从的,没得改,定义成了final,叫做ConcreteMethod;

2.默认课是默认选择的,如果你不取消或者去重写,那么对不起这个课你也要去上,叫做DefaultMethod;

3.选修课是必须自己去选择的,你不能完全不选,怎么选是你的事情,你选择为空也算是要选的,就是你必须实现的方法,叫做AbstractMethod;

4.这四个方法放一块儿叫做模板,就和我们选课的时候那个提交按钮一样,这个按钮都封装好了,每个人都是通过这个模板来实现功能,如果你不点提交,不好意思,这学期算你什么课也没有,回家休息,选课就是这么蛋疼,叫做TemplateMethod;

posted @ 2015-10-06 21:08  √珞珈搬砖工√  阅读(95)  评论(0)    收藏  举报