ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

不一样的模板模式(设计模式十一)

2020-11-01 12:32:01  阅读:233  来源: 互联网

标签:十一 appliaction void 绑定 part1 part2 part3 设计模式 模板


前言

这个补一章,因为当时觉得很简单所以就跳过了,所以补齐十一。

什么是模板模式呢?这是一个晚绑定非常好的体现。把定义抄一下哈:一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。

这节主要介绍一下晚绑定是啥,增强理解,这个模式很简单的。

正文

就是有这样一个场景:

public abstract class Library{
   abstract void part1();
   bool part2()
   {
       return xx;//xx 表示true 或者false
   }
   void part3()
   {
   }
}
public class Appliaction:Library{
   override void part1(){
      //具体实现
   }
}

然后呢,main中这样调用的。

Appliaction appliaction=new Appliaction();
appliaction.part1();
//一些操作
if(appliaction.part2())
{
   appliaction.part3();
}

如果:

appliaction.part1();
//一些操作
if(appliaction.part2())
{
   appliaction.part3();
}

是稳定的,那么可以提取到Appliaction中,那么可以这样:

public abstract class Application{
   override void part1()
  {
  }
   void run()
   {
      part1();
     //一些操作
     if(part2())
     {
        part3();
     }
   }
}

这样做就好了点,但是最好能放在Library中。

因为application 调用的是library 中的函数,因为application 比library 晚实现,那么调用早实现的,就是晚绑定,反过来就是早绑定了。

如果这样的话,会跟好一点:

public abstract class Library{
   abstract void part1();
   bool part2()
   {
       return xx;//xx 表示true 或者false
   }
   void part3()
   {
   }
   void run()
   {
      part1();
     //一些操作
     if(part2())
     {
        part3();
     }
   }
}

那么问题来了,为什么晚绑定比早绑定好?

因为如果把具体实现放在子类中,可以不改变某种算法即可定义该算法的某种步骤,也就是说run 方法放在了一个稳定的类中封装起来了。

可能这样在library 和application中不好理解,那么在main 和application 那个变化中就很好理解了,如果把步骤放在main中,做同样的操作,是不是又要写一遍。

然后放在application中,如果run是稳定的,那么是不是library 的继承类是不是又要写一遍?这样复用性,可读性,还有维护性都降低了很多。

标签:十一,appliaction,void,绑定,part1,part2,part3,设计模式,模板
来源: https://www.cnblogs.com/aoximin/p/13599537.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有