设计模式之模板方法

在讲设计模式之前,先放一张大合照!一家人最紧要整整齐齐:)


图片来源于百度


模板方法

从全家福来看,模板方法属于类模式,和行为模式。这就意味着,它是可以改变类的行为的一种设计模式(个人理解哈哈)。使用模板方法的好处在于,我们可以写一个抽象类,将公共行为给抽取出来,核心的操作留给其子类根据需求逻辑来完成。也就是说,抽象类兼父类定义了一个公共骨架,而一些步骤将延迟到子类,从而改变了其业务逻辑的结构和行为。


模板方法的优点在于封装不变,扩展可变;提取了公共代码,便于维护;行为由父类控制,子类来实现。

缺点是每个不同的实现都需要一个子类,导致类增加,系统变得更加庞大。

那么好,概念说完了,我们上代码去体会!


实现代码 1

OperateSystem.java

public abstract class OperateSystem {
	abstract void init() ;
	abstract void run();
	abstract void destroy();
	
	//模板方法
	public void go() {
		
		/* 我们可以看到,父类定义了执行顺序,也就是算法(业务逻辑)的约束,然后交给子类去实现  */
		init();
		run();
		destroy();
	}
}

MacSystem.java

public class MacSystem extends OperateSystem {

	@Override
	void init() {
		// TODO Auto-generated method stub
		System.out.println("mac init");
	}

	@Override
	void run() {
		// TODO Auto-generated method stub
		System.out.println("mac run");
	}

	@Override
	void destroy() {
		// TODO Auto-generated method stub
		System.out.println("mac destroy");
	}

}


LinuxSystem.java

public class LinuxSystem extends OperateSystem {

	@Override
	void init() {
		// TODO Auto-generated method stub
		System.out.println("Linux init");
	}

	@Override
	void run() {
		// TODO Auto-generated method stub
		System.out.println("Linux run");
	}

	@Override
	void destroy() {
		// TODO Auto-generated method stub
		System.out.println("Linux destroy");
	}
}


运行结果为:

mac init
mac run
mac destroy
Linux init
Linux run
Linux destroy

从上面可以看到,主要父类在定义好 init,run,destroy 方法。然后将这三种方法的执行顺序固定好,这样子类只能去实现相关的逻辑,而不能改变执行的顺序!而且通过子类不同的逻辑,我们就可以写不同的代码,这样就能实现多样化。


实现代码 2

依旧使用操作系统为例子! 因为 Linux 和 Mac 都是通过一个开机键和一个关机键来进行开关机的,所以我们简化一些上面的代码。

OperateSystem.java

public abstract class OperateSystem {

	abstract void run();

	//模板方法
	public void go() {
		
		/* 我们可以看到,父类定义了执行顺序,也就是算法(业务逻辑)的约束,然后交给子类去实现  */
		System.out.println("按开机键开机");
		run();
		System.out.println("按关机键关机");
	}
}

MacSystem.java

public class MacSystem extends OperateSystem {

	@Override
	void run() {
		// TODO Auto-generated method stub
		System.out.println("mac run");
	}

}

LinuxSystem.java
public class LinuxSystem extends OperateSystem {

	@Override
	void run() {
		// TODO Auto-generated method stub
		System.out.println("Linux run");
	}

}

运行结果:
按开机键开机
mac run
按关机键关机
按开机键开机
Linux run
按关机键关机

好的!设计模式之模板方法到此结束!~














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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值