7、大话设计模式之模板方法模式

作用:就是将抽象的方法放到父类中,具体的实现延迟交由各个子类去实现,这也体现了模版方法的代码复用性,再直白点,公共的代码写在父类,具体再父类写抽象并引用,子类去实现这些抽象的方法即可。

案列1、

1、模板方法抽象类

//模板方法抽象类
abstract class AbstractClass {
    //模板方法
    public void templateMethod() {
        
        //写一些可以被子类共享的代码

        this.primitiveOperation1();
        this.primitiveOperation2();
    }
    
    public abstract void primitiveOperation1(); //子类个性的行为,放到子类去实现
    public abstract void primitiveOperation2(); //子类个性的行为,放到子类去实现

}

2、各自实现特有的模板

//模板方法具体类A
class ConcreteClassA extends AbstractClass {
    public void primitiveOperation1(){
        System.out.println("具体类A方法1实现");
    }
    public void primitiveOperation2(){
        System.out.println("具体类A方法2实现");
    }
}
//模板方法具体类B
class ConcreteClassB extends AbstractClass {
    public void primitiveOperation1(){
        System.out.println("具体类B方法1实现");
    }
    public void primitiveOperation2(){
        System.out.println("具体类B方法2实现");
    }
}

3、运行和测试

public class Test {

	public static void main(String[] args){

		System.out.println("**********************************************");		
		System.out.println("《大话设计模式》代码样例");
		System.out.println();		

		AbstractClass classA = new ConcreteClassA();
        classA.templateMethod();
        AbstractClass classB = new ConcreteClassB();
        classB.templateMethod();


		System.out.println();
		System.out.println("**********************************************");

	}
}

结果

案列2、 (主要)

下面的是根据试卷模版,不同的人给出相应的答案,这种设计模式就可以用在答题系统中。

1、核心

2、模板方法抽象

abstract class TestPaper {

    //试题1
    public void testQuestion1() {
        System.out.println(" 杨过得到,后来给了郭靖,炼成倚天剑、屠龙刀的玄铁可能是[ ] "+
            " a.球磨铸铁 b.马口铁 c.高速合金钢 d.碳素纤维 ");
        System.out.println("答案:"+this.answer1());
    }
    protected abstract String answer1();

    //试题2
    public void testQuestion2() {
        System.out.println(" 杨过、程英、陆无双铲除了情花,造成[ ] "+
            "a.使这种植物不再害人 b.使一种珍稀物种灭绝 c.破坏了那个生物圈的生态平衡 d.造成该地区沙漠化  ");
        System.out.println("答案:"+this.answer2());
    }
    protected abstract String answer2();

    //试题3
    public void testQuestion3() {
        System.out.println(" 蓝凤凰致使华山师徒、桃谷六仙呕吐不止,如果你是大夫,会给他们开什么药[ ] "+
            "a.阿司匹林 b.牛黄解毒片 c.氟哌酸 d.让他们喝大量的生牛奶 e.以上全不对   ");
        System.out.println("答案:"+this.answer3());
    }
    protected abstract String answer3();
}

3、各自实现特有的模板

//学生甲答的试卷
class TestPaperA extends TestPaper {
    //试题1
    protected String answer1() {
        return "b";
    }
    //试题2
    protected String answer2() {
        return "a";
    }
    //试题3
    protected String answer3() {
        return "c";
    }
}
//学生乙答的试卷
class TestPaperB extends TestPaper {
    //试题1
    protected String answer1() {
        return "d";
    }
    //试题2
    protected String answer2() {
        return "b";
    }
    //试题3
    protected String answer3() {
        return "a";
    }
}

4、运行和结果

public class Test {

	public static void main(String[] args){

		System.out.println("**********************************************");		
		System.out.println("《大话设计模式》代码样例");
		System.out.println();		

		System.out.println("学生甲抄的试卷:");
        TestPaper studentA = new TestPaperA();
        studentA.testQuestion1();
        studentA.testQuestion2();
        studentA.testQuestion3();

        System.out.println("学生乙抄的试卷:");
        TestPaper studentB = new TestPaperB();
        studentB.testQuestion1();
        studentB.testQuestion2();
        studentB.testQuestion3();

		System.out.println();
		System.out.println("**********************************************");

	}
}

结果

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

越来越没意思

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值