模板方法模式(Template Method)从最初的代码一步步改进

问题的引入——标准化考试
● 考试的例子中,考试题都是相同的,没人的解答可以不同
● 定义一个抽象类,将部分逻辑以具体方法以及具体子类的形式实现,然后声明一些抽象方法来破事子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。

模板方法模板
结构图:
在这里插入图片描述
抽象模板角色有如下的责任:
1、定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做进本操作,它们是一个顶级逻辑的组成步骤。(TemplateMethod())
2、定义并实现了一个模板方法。(PrimitiveOperation())

代码实现:

abstract class AbstractClass
{
	//一些抽象行为,放到子类中去实现
	public abstract void PrimitiveOperation1();
	public abstract void PrimitiveOperation2();
	//模板方法,给出了逻辑的股价,而逻辑的组成是一些相应的抽象操作,他们都推迟到了子类实现
	public void TemplateMethod()
	{
		PrimitiveOperation 1();
		PrimitiveOperation 2();
		System.out.println("");
	}
}
class ConcreteClassA extends AbstractClass
{
	public void PrimitiveOperation1()
	{
		System.out.println("具体类A方法1实现");
	}
	public void PrimitiveOperation2()
	{
		System.out.println("具体类A方法2实现");
	}
}

客户端调用:

public class program{
	public static void main(String[] args){
		AbstractClass c;
		c = new ConcreteClassA();
		c.TemplateMethod();

		c = new ConcreteClassB();
		c.TemplateMethod();

	}
}

模板方法模式特点:
● 模板方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势
● 提供了一个代码复用平台

优点:实现代码的复用

缺点:算法骨架不容易升级(模板和子类是非常耦合的,如果要变更模板中的算法骨架,会影响子类变化)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值