设计模式-模板方法设计模式
设计模式-模板方法设计模式
设计模式:
设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格以及解决问题的思考方式,设计模式免去了我们自己再去思考和摸索。就像经典的棋谱,对于不同的棋局我们使用不同的棋谱。
创建型模式:工厂方法模式 抽象工厂模式 单例模式 建造者模式 原型模式
结构型模式: 适配器模式 装饰器模式 代理模式 外观模式 桥接模式 组合模式 享元模式
行为型模式:策略模式 模板方法模式 观察者模式 迭代子模式 责任链模式 命令模式 备忘录模式 状态模式 访问者模式 中介者模式 解释器模式
模板方法设计模式:
抽象类体现的是一种模板设计模式,抽象类作为多个子类的通用模板,子类在抽象类的基础上再进行扩展、改造,但是子类总体上会保留抽象类的行为方法(抽象方法)。
解决的问题:
当功能内部一部分是确定的,一部分实现是不确定的,这时候可以把不确定的暴露出去,让子类去实现。换一句话说-------在软件开发实现一个算法的时候,整体的步骤虽然很固定、通用,这些步骤已经在父类中写好了。但是某些部分易变,易变部分可以抽象出来,供不同的子类去实现,这就是一种模板模式。
package com.geng;
public abstract class TemplateTest {
public long spendTime() throws InterruptedException {
long startTime=System.currentTimeMillis();
//上半部分和下半部分都是比较确定的代码,只有执行的函数是不确定的,所以我们可以将他设置为抽象方法,让子类去实现
code();
long endTime= System.currentTimeMillis();
return endTime-startTime;
}
public abstract void code() throws InterruptedException;
}
class SubTempalteTest extends TemplateTest{
@Override
public void code() throws InterruptedException {
for(int i=1;i<1001;i++){
boolean flag=false;
for(int j=2;j<Math.sqrt(i*1.0);j++){
if(i%j==0){
flag=true;
break;
}
}
if(!flag){
System.out.println(i);
}
}
Thread.sleep(20);
}
public static void main(String[] args) throws InterruptedException {
SubTempalteTest subTempalteTest=new SubTempalteTest();
System.out.println(subTempalteTest.spendTime());
}
}
package com.geng;
public abstract class TemplateTest {
public void first(){
System.out.println("执行第一步");
}
public void third(){
System.out.println("执行第三步");
}
public abstract void second();
public final void total(){
this.first();
second();
this.third();
}
}
class SubTempalteTest1 extends TemplateTest{
@Override
public void second() {
System.out.println("我是一号");
}
}
class SubTempalteTest2 extends TemplateTest{
@Override
public void second() {
System.out.println("我是二号");
}
}
class test{
public static void main(String[] args){
SubTempalteTest1 subTempalteTest1=new SubTempalteTest1();
SubTempalteTest2 subTempalteTest2=new SubTempalteTest2();
subTempalteTest1.total();
subTempalteTest2.total();
}
}
浙公网安备 33010602011771号