行为型模式之模板方法模式(java版)

1.引入

模板方法模式就是当我们需要把某些细节层次,但器个别步骤的更详细的实现却是不同的时候,就需要用模板方法模式。实际上就是把一些更详细的信息在子类中去实现,这里更详细的信息就是可变的信息,因为每个子类都不同,所以具有可变信息,然后把不变的行为给他封装到父类中去,这样就去除子类中重复的代码了。

2.举例

一般我们做系统时都是照着软件工程的思想,就是先做需求分析,然后概要设计,然后详细设计,然后编码,测试,发布这几个步骤,虽然每个系统都不一样,但是我们的工作流程是不变的,只是步骤中某个细节可能会是不同的,如需求分析,不同的系统功能,需求分析肯定是不同的。在工作流程上是不变,而其细节上更详细的设计是可变的,我们就采用模板方法模式。对于不同的系统都采用这个工作流程这套模板来设计。

3.实现

--3.1设计流程模板类:

//就是从需求分析到发布系统的一套设计流程
public abstract class DesignCycle {

	public abstract void needAnalysis();
	
	public abstract void conceptualDesign();
	
	public abstract void detailedDesign();
	
	public abstract void coding();
	
	public abstract void testSystem();
	
	public abstract void publishSystem();
	
	public void templateDesignSystem(){
		System.out.println("------------开始开发----------");
		needAnalysis();
		conceptualDesign();
		detailedDesign();
		coding();
		testSystem();
		publishSystem();
		System.out.println("------------开发完毕-----------");
	}
}

--3.2.支付系统的实现类:

public class PaymentSystem extends DesignCycle{

	@Override
	public void needAnalysis() {
		// TODO Auto-generated method stub
		System.out.println("支付系统的需求分析");
	}

	@Override
	public void conceptualDesign() {
		// TODO Auto-generated method stub
		System.out.println("支付系统的概要设计");
	}

	@Override
	public void detailedDesign() {
		// TODO Auto-generated method stub
		System.out.println("支付系统的详细设计");
	}

	@Override
	public void coding() {
		// TODO Auto-generated method stub
		System.out.println("支付系统的编码");
	}

	@Override
	public void testSystem() {
		// TODO Auto-generated method stub
		System.out.println("支付系统的测试");
	}

	@Override
	public void publishSystem() {
		// TODO Auto-generated method stub
		System.out.println("支付系统的发布");
	}
	
}

--3.3.物流系统的实现类:

//物流系统类
public class LogisticSystem extends DesignCycle{

	@Override
	public void needAnalysis() {
		// TODO Auto-generated method stub
		System.out.println("物流系统的需求分析");
	}

	@Override
	public void conceptualDesign() {
		// TODO Auto-generated method stub
		System.out.println("物流系统的概要设计");
	}

	@Override
	public void detailedDesign() {
		// TODO Auto-generated method stub
		System.out.println("物流系统的详细设计");
	}

	@Override
	public void coding() {
		// TODO Auto-generated method stub
		System.out.println("物流系统的编码");
	}

	@Override
	public void testSystem() {
		// TODO Auto-generated method stub
		System.out.println("物流系统的测试");
	}

	@Override
	public void publishSystem() {
		// TODO Auto-generated method stub
		System.out.println("物流系统的发布");
	}

}

--3.4测试类:

public class Test {

	public static void main(String[] args) {
		DesignCycle dc;
		dc=new PaymentSystem();
		dc.templateDesignSystem();
		
		dc=new LogisticSystem();
		dc.templateDesignSystem();
	}
}

结果:

------------开始开发----------
支付系统的需求分析
支付系统的概要设计
支付系统的详细设计
支付系统的编码
支付系统的测试
支付系统的发布
------------开发完毕-----------
------------开始开发----------
物流系统的需求分析
物流系统的概要设计
物流系统的详细设计
物流系统的编码
物流系统的测试
物流系统的发布
------------开发完毕-----------

---------------------------------------------------------------------------------------------------------------------------------------

总结1:

模板方法模式应用场景:当系统中存在不变的行为在子类中重复出现时,就将不变的行为和可变的行为分离,将不变的行为抽取出来放到一个单一的地方,让子类们去实现这个单一的地方。避免了大量的重复代码,也同时为子类的设计做了一个统一的规范。

总结2:

具体的做法就是将重复不变的部分放在抽象父类中,然后让子类们去继承父类,然后重写父类的抽象方法。

总结3:

模板方法模式的使用提高了代码的复用性。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值