设计模式之模板方法模式

模板方法模式:

定义了一个算法的骨架,而将一些步骤延迟到子类中,模版方法使得子类可以在不改变算法结构的情况下,重新定义算法的步骤。

下面来个例子展示下本公司的上班情况(纯属娱乐,如有雷同,请对号入座)。简单描述一下:本公司有程序猿、测试、HR、项目经理等人,下面使用模版方法模式,记录下所有人员的上班情况:

package 模板方法模式;

public abstract class Worker {
	protected String name;

	public Worker(String name) {
		this.name = name;
	}

	/**
	 * 记录一天的工作
	 */
	public final void workOneDay() {
		System.out.println("---------------------work start------------------");
		enterCompany();
		computerOn();
		work();
		computerOff();
		exitCompany();
		System.out.println("-----------------work end ---------------");
	}

	/**
	 * 工作
	 */
	public abstract void work();

	/**
	 * 关闭电脑
	 */
	private void computerOff() {
		System.out.println(name + "关闭电脑");
	}

	/**
	 * 打开电脑
	 */
	private void computerOn() {
		System.out.println(name + "打开电脑");
	}

	/**
	 * 进入公司
	 */
	public void enterCompany() {
		System.out.println(name + "进入公司");
	}

	/**
	 * 离开公司
	 */
	public void exitCompany() {
		System.out.println(name + "离开公司");
	}
}
package 模板方法模式;

public class ItWorker extends Worker{

	public ItWorker(String name) {
		super(name);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void work() {
		// TODO Auto-generated method stub
		System.out.println(name + "写程序,改bug");
	}

}

package 模板方法模式;

public class HRWorker extends Worker{

	public HRWorker(String name) {
		super(name);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void work() {
		// TODO Auto-generated method stub
		System.out.println(name + "看简历,打电话,接电话");
	}

}
package 模板方法模式;

public class ManagerWorker extends Worker{

	public ManagerWorker(String name) {
		super(name);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void work() {
		// TODO Auto-generated method stub
		System.out.println(name + "玩吃鸡,打lol");
	}

}

package 模板方法模式;

public class TestWorker extends Worker{

	public TestWorker(String name) {
		super(name);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void work() {
		// TODO Auto-generated method stub
		System.out.println(name + "写测试用例,提bug");
	}

}

最后进行测试:

package 模板方法模式;

public class test {
	public static void main(String[] args) {
		Worker t1 = new ItWorker("魏源宏");
		t1.workOneDay();

		Worker t2 = new HRWorker("迪迪");
		t2.workOneDay();

		Worker t3 = new TestWorker("张三");
		t3.workOneDay();

		Worker t4 = new ManagerWorker("王二狗");
		t4.workOneDay();
	}
}

贴出输出结果:

---------------------work start------------------
魏源宏进入公司
魏源宏打开电脑
魏源宏写程序,改bug
魏源宏关闭电脑
魏源宏离开公司
-----------------work end ---------------
---------------------work start------------------
迪迪进入公司
迪迪打开电脑
迪迪看简历,打电话,接电话
迪迪关闭电脑
迪迪离开公司
-----------------work end ---------------
---------------------work start------------------
张三进入公司
张三打开电脑
张三写测试用例,提bug
张三关闭电脑
张三离开公司
-----------------work end ---------------
---------------------work start------------------
王二狗进入公司
王二狗打开电脑
王二狗玩吃鸡,打lol
王二狗关闭电脑
王二狗离开公司
-----------------work end ---------------
这就是模板方法模式了


猜你喜欢

转载自blog.csdn.net/qq_36882843/article/details/80271418