【聚能聊话题】聊聊设计模式,封装算法——模板方法模式-阿里云开发者社区

开发者社区> 微wx笑> 正文

【聚能聊话题】聊聊设计模式,封装算法——模板方法模式

简介: 前面我们聊了:什么是设计模式?你知道多少?你必须知道的六大设计原则第一个设计模式,我是皇帝我独苗,单例模式第二个设计模式,工厂方法模式第三个设计模式,抽象工厂模式这个真的很枯燥啊,大家参与的很少,但是你只要按格式认真参与,得到奖品的机会可能更高哦!今天我们来聊聊第四个设计模式,模板方法模式。
+关注继续查看

前面我们聊了:
什么是设计模式?你知道多少?
你必须知道的六大设计原则
第一个设计模式,我是皇帝我独苗,单例模式
第二个设计模式,工厂方法模式
第三个设计模式,抽象工厂模式
这个真的很枯燥啊,大家参与的很少,但是你只要按格式认真参与,得到奖品的机会可能更高哦!
今天我们来聊聊第四个设计模式,模板方法模式。
image
模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。(Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure)

看了定义恐怕会很头大,下面是通俗一点的:
在软件开发过程中,如果相同的一段代码复制过两次,就需要对设计产生怀疑,架构师要明确地说明为什么相同的逻辑要出现两次或更多次。
封装算法,将相同的代码封装到一个方法中,这就是模板方法模式。

public abstract class AbstractClass {
    protected abstract void doAnything();
    protected abstract void doSomething();
    protected boolean isDoSomething(){ //父类方法返回真
        return true;
    }
    public final void templateMethod(){
        /*
         * 调用基本方法,完成相关的逻辑
         */
        this.doAnything();
        if(this.isDoSomething())
            this.doSomething();
    }
}
public class ConcreteClass1 extends AbstractClass {
    private boolean isDoSth;
    @Override
    protected void doAnything() {
        // TODO Auto-generated method stub
        //子类实现具体
    }

    @Override
    protected void doSomething() {
        // TODO Auto-generated method stub    
    }
    protected void setDo(boolean isDo){
        this.isDoSth = isDo;
    }

    @Override
    protected boolean isDoSomething(){
        return isDoSth;
    }
}

public class ConcreteClass2 extends AbstractClass {

    @Override
    protected void doAnything() {
        // TODO Auto-generated method stub
        //子类实现具体
    }

    @Override
    protected void doSomething() {
        // TODO Auto-generated method stub    
    }
}

这个模式是用来创建一个算法的模板。什么是模板?如你所见的,模板就是一个方法。更具体地说,这个方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。这可以确保算法的结构保持不变,同时由子类提供部分实现。

模板方法模式的优点
封装不变部分,扩展可变部分。把认为不变部分的算法封装到父类中实现,而可变部分的则可以通过继承来继续扩展。
提取公共部分代码,便于维护。
行为由父类控制,子类实现。
模板方法模式的缺点
按照设计习惯,抽象类负责声明最抽象、最一般的事物属性和方法,实现类负责完成具体的事务属性和方法,但是模板方式正好相反,子类执行的结果影响了父类的结果,会增加代码阅读的难度。
模板方法模式的使用场景
多个子类有共有的方法,并且逻辑基本相同时。
重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现。
重构时,模板方法是一个经常使用的方法,把相同的代码抽取到父类中,然后通过构造函数约束其行为。

今天的话题:
1、一般模板方法都会加上一个关键字,你知道是什么吗?作用目的是什么?

2、模板方法模式可以扩展,使用钩子,你能指出示例中对应功能的代码吗?

3、有一个设计模式和模板方法模式很像,你知道它是什么模式吗?它们有什么相似与不同?

点击链接去参与话题,认真回复就可能获得以下奖品哦!

image

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
多模态视频商品检索记录再刷新!第二届淘宝直播算法大赛完美落幕
多模态视频商品检索记录再刷新!第二届淘宝直播算法大赛完美落幕
21 0
用阿里云建网站三种方式(自助建站+模板建站+功能定制建站)
站长分享利用阿里云创建网站的三种方式及优势对比
77 0
用阿里云建网站三种方式(自助建站+模板建站+功能定制建站)
站长分享利用阿里云创建网站的三种方式及优势对比
89 0
+关注
微wx笑
无知人生,记录点滴。 不积跬步,无以至千里;不积小流,无以成江海…… 订阅号:微wx笑, 个人站点:https://www.ivu4e.com/, CSDN博客:https://blog.csdn.net/testcs_dn
1417
文章
1385
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载