Template Method Pattern是在父类建立处理逻辑的大纲骨架,而在子类补充具体的处理内容,如果把模板方法用在产生对象实例方面,就是式厂方法模式
Factory Method Pattern在父类规定对象的创建方法,但并没有深入到较具体的类名。所有具体的完整内容都放在子类,根据这个原则,我们可以大致分成产生对象实例的框架和实际产生对象实例的类两方面
1.框架类
package com.pattern.factorymethod;
public abstract class Factory {
public final Cup make(String shape,String color) {//产生对象的方法,用final修饰把保证在子类中不会被修改
Cup cup = makeCup(shape);
smearColor(cup,color);
return cup;
}
protected abstract Cup makeCup(String shape); //抽象方法,制作水杯,shape参数指定水杯的外形
protected abstract void smearColor(Cup cup,String color); //抽象方法,给水杯涂上颜色
}
2.实现类
package com.pattern.factorymethod;
public class CupFactory extends Factory {
protected Cup makeCup(String shape) {
Cup cup = new Cup();
cup.setShape(shape);
return cup;
}
protected void smearColor(Cup cup, String color) {//涂颜色
cup.setColor(color);
}
}
3.水杯(实体类)
package com.pattern.factorymethod;
public class Cup {
private String shape;
private String color;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getShape() {
return shape;
}
public void setShape(String shape) {
this.shape = shape;
}
}
4.测试
package com.pattern.factorymethod;
public class Main {
public static void main(String[] args) {
//创建一个水杯工厂
CupFactory factory = new CupFactory();
Cup cup1 = factory.make("圆形", "红色");//我要一个圆形,红色的杯子
System.out.println("杯子造好了");
System.out.println("形状:"+cup1.getShape());
System.out.println("颜色:"+cup1.getColor());
Cup cup2 = factory.make("方形", "蓝色");//我要一个方形,蓝色的杯子
System.out.println("杯子造好了");
System.out.println("形状:"+cup2.getShape());
System.out.println("颜色:"+cup2.getColor());
}
}
结果:
杯子造好了
形状:圆形
颜色:红色
杯子造好了
形状:方形
颜色:蓝色