模板设计模式的大体思想就是利用多态来辅助抽象,从而达到减少重复代码的作用。
模板设计模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构可重定义该算法的某些特定的步骤。
就好比我们引进了一条汽车生产线,能生产某一种的车,但是只是颜色不一样。
首先我们先定义车的类Car
class Car
{
int color;
String engine;
String conpont1;
String conpont2;
String conpon3;
public Car(){}
Public void SetConpone(int color ,String engine,String conponent1,String conponent2,String conpont3)
{
this.color=color;
this.engine=engine;
this.conponent1=conponent1;
this.conponent2=conponent2;
this.conponent3=conponent3;
}
public void Show()
{
System.out.println("该车的颜色:"+color+"发动机:"+engine+"组件1"+conponent1+"组件2"+conponent2+"组件3:"+conponent3);
}
}
当我们使用此类,实例化多个对象时会发现,这些对象大部分的属性都是相同的,只有少数的属性是不同的,造成了极大的冗余。
比如
Car car1=new Car();
car1.setConponet("红",“engine1”,"组件1","组件2","组件3");
Car car2=new Car();
car2.setConponent("白","engine1","组件1","组件2","组件3");
。。。
在这里我们可以发现用以上的对象只有颜色这个属性是不同的,其余都是相同 的,所以可以抽取出来。
我们可以在父类中定义一个虚函数,而对虚函数的实现放到子类中。
class Car
{
int color;
String engine;
String conpont1;
String conpont2;
String conpon3;
public Car()
{
this.color=color;
this.engine="发动机";
this.conponent1=“组件1”;
this.conponent2="组件2";
this.conponent3=“组件3”;
}
public virtual int getColor()
{
return "";
}
public void Show()
{
System.out.println("该车的颜色:"+getColor()+"发动机:"+engine+"组件1"+conponent1+"组件2"+conponent2+"组件3:"+conponent3);
}
}
Class BMW extends Car
{
public BMW()
{
super();
}
public void getColr()
{
return "红色";
}
}
Class Benz extends Car
{
public BMW()
{
super();
}
public void getColor()
{
return "黑色";
}
}
这样我们可以利用前面一个对象复制出大量的同类的对象,而不用对每个对象都重新赋值。
Car car1=new BMW();
car1.Show();
Car car2=new Benz();
car2.Show();