4、方法模式(Method Pattern)

2020-07-27  本文已影响0人  火山_6c7b

1. 简介

  方法模式一般指Template Method即模板方法,组成模板的方法被定义在父类中,而在子类中实现父类中定义的这些抽象方法。虽然子类中实现了父类的抽象方法,都有各自的实现,但是在父类定义了处理流程的框架,无论子类中的具体实现如何,处理的流程都会按照父类中所定义的那样进行,这种设计模式就是Template Method模式。

  在模板方法模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。

1.1 使用场景

当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现
重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能由各个子类实现
控制子类扩展;模板方法只在特定点调用“ hook”操作 ,这样就只允许在这些点进行扩展

1.2 优缺点

优点:

缺点:

1.3 uml图

2. 实现

顶层虚拟类:

public abstract class AbstractMaterialRebuilder implements MaterialRebuilder {

    @Override
    public RecItem rebuild() {
        RecItem material = rebuildMaterial();
        fillSubSkuProfile();
        return material;
    }

    public abstract RecItem rebuildMaterial();

    protected abstract void fillSubSkuProfile();

}

频道封装类:

public class ChannelRebuilder extends AbstractMaterialRebuilder {

    @Override
    public RecItem rebuildMaterial() {
        RecItem channel = new Channel();
        return channelItem;
    }

    protected void fillSubSkuProfile() {
         System.out.println("fill channel profile");
    }
}

场景封装类:

public class SceneRebuilder extends AbstractMaterialRebuilder {

    @Override
    public RecItem rebuildMaterial() {
        RecItem channel = new Scene();
        return channelItem;
    }

    protected void fillSubSkuProfile() {
         System.out.println("fill scene profile");
    }
}

客户端调用示例:

    public static void main(String[] arg) {
        AbstractMaterialRebuilder rebuilder = new ChannelRebuilder();
        rebuilder.rebuild();
        AbstractMaterialRebuilder rebuilder = new SceneRebuilder();
        rebuilder.rebuild();
    }
上一篇 下一篇

猜你喜欢

热点阅读