继承的第一原则



  今天确实有点小冷了.真不想起床,也没什么胃口吃东西.继续去上课~~~~ :-(
   最近学的东西感觉都有时间去消化,慢慢来~~~~看看新闻什么的调节下.今天微博貌似很火爆..各种恋爱啊..
  跑题了.继续代码吧...
   这次说的是继承的第一原则
 对于【继承】的第一印象就是获得了父的所有方法和属性,所以相对于继承了父的功能和职责。而后面自己的设计也是基


于这个原则,就是复用原则,复用父项的方法原则。慢慢的延伸就是有多个子类,就会把几个子类共用的一些方法放到父类


里面,而这种设计思想深深的影响了自己很久。
  而这种方法却在近年来被自己慢慢的推翻,现在使用继承的第一原则就是模板,Template。通过父类使用Template模式


,构造出子类的流程,而自己只是在对应的钩子方法(Hook)里面填充着差异的地方,如果不是这种情况,我会尽量的减少


继承的使用。对于原来的把子类的方法推到父类的方法里面,则通过其它的方式进行消除掉了。造成这种变化,只是源于一


个原则的影响,【一切私有方法都是有罪的】。
  在编码的时候,大量的把方法推到父类之后,才发现这些方法,别的地方也会需要,而这个时候,就很痛苦,因为通过继


承肯定不行,但是不继承,别的地方就需要copy一份,不copy就需要把这个方法变成静态的方法,而这个时候,就会出现


很奇怪的关系了。这种问题,我一般都是把这些方法归属到几个其它类中,因为调用super.method(),和调用


Other.method()实际上代码是一样的,都没有减少和增加,但是类的职责却清晰了很多。
  近些年随着IOC的增多,那么Template的使用也自然增多了很多,所以也自然的倾向于父类定义流程,子类实现差异的方


式来做,而不是父类提供方法,子类进行组装。两种差异的直观比较,见下面的代码。
 
  第一种方式:父类提供大量方法,子类组装
  1 public class FatherMehod {
  2
  3 protected void a() {
  4 // doSomeThing
  5 }
  6
  7 protected void b() {
  8 // doSomeThing
  9 }
  10
  11 protected void c() {
  12 // doSomeThing
  13 }
  14
  15 }
  1 public class SonSetup extends FatherMehod {
  2 public void doProcess() {
  3 a();
  4 b();
  5 c();
  6 }
  7 }
  第二种方法:父类提供流程,子类实现差异(Template)
  1 public abstract class FatherTemplate {
  2 public void doProcess() {
  3 a();
  4 b();
  5 c();
  6 }
  7
  8 protected abstract void a();
  9 protected abstract void b();
  10 protected abstract void c();
  11 }
  1 public class SonDiff extends FatherTemplate{
  2
  3 protected void a() {
  4 // doSomeThing
  5 }
  6
  7 protected void b() {
  8 // doSomeThing
  9 }
  10
  11 protected void c() {
  12 // doSomeThing
  13 }
  14
  15 }
  差异就在于在第一种方式里面子类实现的代码,变成父类实现了,实现了控制反转(IOC),这个就是我的继承的第一原则


,Template。
.哦对了,昨天那个还没弄.算了,代码不在,明天再发..
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值