EffectiveJava之16-★接口优于抽象类

1、 Mixin(混合类型):一个类出了实现它的“基本类型”之外,还可以实现这个mixin类型,以表明他提供了某些可供选择的行为。---用接口来定义,抽象类不能。

2、 他允许可选的功能被混合到一个类型的基本功能中。

3、 接口可以是我们构造出非层次结构的类型框架但有些事物不能整齐的组织成一个严格的层次结构。 比如 歌唱家 和 作曲家。

Public interface Singer{   --- Sing(Song s);}

Public interface SongWriter{   --- compose(Song s);}

 新的接口: publicinterface SSW extends Singer,SongWriter{---XXX();}

  另一个做法是:写个膨胀(bloated)的类层次,对于每一种要被支持的属性组合,都包含一个单独的类。如果在整个类型系统中有N个属性,则共有2^N 种可能组合有带提供支持---------------------组合爆炸(combinatorialexplosion)。

4、接口的作用时定义类型,但 骨架实现类 的实现类负责所有与借款单实现相关的工作。

                                                        ||||

       把接口和抽象类的优点结合,对于每个期望导出的重要接口都提供一个抽象的骨架实现类。       ------------------------AbstractInterface如:AbstractSet AbstractList………

4、 骨架实现类 有助于接口的实现。 实现了这个接口的类可以把对于接口方法的调用,转发到另一个内部私有类的实例上,而这个内部私有类扩展了骨架实现类。---模拟多重继承(包装类模式有关系)。    

骨架类实现的编写:

研究接口,确定最为基本的(primitive)方法,其他方法在实现的时候以他们为基础。这些方法僵尸骨架实现类中的抽象方法。然后必须对接口中所有其他的方法提供具体的实现。

比如  :   Map.Entry 接口

       Public abstract class AbstractMapEntryimplements Map.Entry{

//primitives

Public abstract Object getkey();

Pbulic abstract Object getValue();

 

//Entries in  modifiable maps must overridethis method

Public Object setValue(Object value){

throw new UnsupportedOperationException();

}

 

//implements the general contract of Map.Entry.equals

Public boolean equals(Object o){

   If( o == this)

        Returntrue;

   If(!(oinstanceof Map.Entry))

        Returnfalse;

   Map.Entry arg= (Map.Entry) o ;

        Return eq( getKey() , arg.getKey())&&eq(getValue() , arg.getValue());

}

Private static boolean eq(Object o1 , Object o2 ){

        Return(o1 == null ? o2 == null : o1.equals(o2));

        }

//Implements the general contract ofMan.Entry.hashcode

      Public inthashCod(){

                 Return

                      (getKey() == null ? 0: getKey().hashCode())^

                      (getValue() == null ?0: getValue ().hashCode());

              }

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值