美文网首页
4、方法模式(Method Pattern)

4、方法模式(Method Pattern)

作者: 火山_6c7b | 来源:发表于2020-07-27 17:50 被阅读0次

    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();
        }
    

    相关文章

      网友评论

          本文标题:4、方法模式(Method Pattern)

          本文链接:https://www.haomeiwen.com/subject/lojnlktx.html