第二章 设计模式之模板模式

本文详细介绍了设计模式中的模板模式,包括其组成元素如模板类与具体算法类,通过建造房屋的例子展示了模板模式的工作原理。此外,还探讨了该模式在实际项目中的应用案例,如在不同类型的抽奖活动中如何利用模板模式来简化代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

             模板模式有两种类:1.模板类   2.具体算法类

             模板类

             模板类规定了算法骨架既执行的逻辑顺序,模板类中也将一些公共重用方法给提取出来,在模板类中有三种方法:

             1.模板方法:规定具体方法的调用逻辑顺序,也就是说它只负责一些方法按顺序执行,而不管这些方法的具体实现。

             2.公共方法:将子类中的公共方法提到了模板类中。

             3.易变方法:模板类将这些易变方法交由子类去实现,这些易变方法可以是抽象的也可以是具体的

             

            具体算法类

             具体算法类继承了模板类,并且重写了那些易变的方法,这些算法类对那些易变方法的重写都有着自己的特色

           调用过程

             实例一个模板类变量,模板类变量是指向子类实例的,然后再通过模板变量调用模板类里的模板方法来完成功能
           

           代码示例

              模板类
       
package com.model.templet;
/**
 * 模板类
 * 建造房子,我把分为三步
 * 1.打地基   2.砌墙    3.封顶
 * @author Administrator
 *
 */
public abstract class TempletBuilder {
	//打地基方法(公共方法)
	protected void fundation(){
		System.out.println("给房子打地基");
	}
	
	//砌墙(易变方法)
	protected abstract void buildWall();
	
	//封顶(易变方法)
	protected abstract void buildRoot();
	
	//建造房屋的过程(模板方法)
	public void build(){
		System.out.println("做房子三步曲");
		fundation();
		buildWall();
		buildRoot();
	}
}

            具体类

package com.model.templet;
/**
 * 建造高楼大厦类
 * @author Administrator
 *
 */
public class LargeBuilding extends TempletBuilder{

	@Override
	protected void buildWall() {
		System.out.println("建造高楼大厦:用特种玻璃做墙");
		
	}

	@Override
	protected void buildRoot() {
		System.out.println("建造高楼大厦:用水泥板封顶");
		
	}

}

package com.model.templet;
/**
 * 建造竹林小屋类
 * @author Administrator
 *
 */
public class SmallBuilding extends TempletBuilder{

	@Override
	protected void buildWall() {
		System.out.println("建造竹林小屋:用竹子做墙");
		
	}

	@Override
	protected void buildRoot() {
		System.out.println("建造竹林小屋:用茅草封顶");
		
	}

}


测试类

package com.model.templet;

public class TempletModelMain {
	public static void main(String[] args){
		//建造高楼大厦
		TempletBuilder builder = new LargeBuilding();
		builder.build();
		System.out.println("*****************************");
		TempletBuilder builder2 = new SmallBuilding();
		builder2.build();
	}

}

输出结果:

做房子三步曲
给房子打地基
建造高楼大厦:用特种玻璃做墙
建造高楼大厦:用水泥板封顶
*****************************
做房子三步曲
给房子打地基
建造竹林小屋:用竹子做墙
建造竹林小屋:用茅草封顶


我个人觉得模板模式的好处:

1.将公共行为提出出来,减少代码的重用,易变的行为延迟到子类中去实现,当有什么变化的时候,我们只需更改子类就可以了,提现了”开放---封闭“原则。

2.通过模板类规定了算法的骨架,将逻辑过程封装起来,这样更加稳定和安全

=========16年6月份写的,现在21面7月份了,将以前没有补上的地方给补上======

以前做过活动,而且或作很多活动,活动类型有很多形式,例如大转盘,刮刮乐,还有那种砍价的活动,抽奖活动的流程分为1.判断抽奖人是否符合抽奖条件;2.进行中奖判断,3.分发奖品。

其中很多活动中奖判断和分发奖品这两个大的步骤是可以复用的,但是判断抽奖资格每个活动可能会有自己的具体逻辑,所以抽奖整个流程可以当成是一个模板类,其中抽奖方法就是模板方法,再模板方法中就分为1.判断抽奖人是否符合抽奖条件;2.进行中奖判断,3.分发奖品。然后在模板类中具体实现2.进行中奖判断,3.分发奖品。这两个方法,然后再到具体活动类里面实现抽奖逻辑的判断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值