抽像化的一些思考

这是一本阐述微观设计的书,而不是阐述宏观设计的书。
《Java与模式》首先阐述了代码的设计原则,又描述了怎样来创建一个类或对象,紧接着告诉大家怎样来组织这些类和对象来实现功能。它是设计模式,而不是架构模式。
OO面向对象编程,实质上是面向抽象编程,即面向接口编程。所谓的面向接口编程,指类之间都要使用接口来通信。类来封装对象的行为,接口来封装类之间的通信方法,接口是更高层次的抽象。这里的接口可以是一个具体类,一个抽象类,或是一个Java接口,它不单单指Java接口。
第四章: 开闭原则

抽象化:面向对象设计的重要原则是创建抽象化,并且从抽象化导出具体化。具体化可以给出不用的版本,每一个版本都给出不同的实现。

1。开闭原则
一个软件应该对扩展开放,对修改关闭。
一种可变性不应当散落在代码的很多角落里,而应当被封装到一个对象里面。
继承应当被看做是封装变化的方法,而不应当被认为是从一般的对象生成特殊的对象的方法。
一种可变性不应当与另一种可变性混合在一起。最好所有的继承结构不超过两层,不然就意味着将两种不同的可变性混合在了一起。

2。里氏代换原则
任何基类可以出现的地方,子类一定可以出现。

3。依赖倒转原则
要依赖于抽象,不要依赖于实现。

4。合成/聚合复用原则
要尽量使用合成/聚合,而不是继承关系达到复用的目的。

5。迪米特法则
一个软件实体应当与尽可能少的其它实体发生相互作用。(模块之间)

6。接口隔离原则
应当为客户端提供尽可能小的单独的接口,而不是提供大的总接口。

7。策略模式
将每一个算法用一个类封装起来,多个类实现同一个接口。用到哪种策略就实例化哪个类。

**************************************************************

第五章: 接口

它应当只用来声明一个新的类型

1。接口可以认为是继承的一种,叫做接口继承,而extends叫做实现继承。接口是个角色,而实现类是这个角色的演员。接口这个角色使之可以动态的智能的选择演员。

可插入性:
别的类只让这个角色做事情,而它不必关心是哪个演员做的。

2。用它来声明一个新的类型。在理想情况下,一个具体的java类应当只实现java接口和抽象java类中声明过的方法,而不应当给出多余的方法。

3。类型等级结构:java接口一般用来作为一个类型的等级结构的起点。
class本身是个类型,但它的起点应该是它所实现的接口。

混合类型:当一个具体的类处于一个类的等级结构中的时候,它再实现一个接口,它就成了混合类型,而不单单是等级结构中的子类型。混合类型是保证基于这个等级结构类型的可插入性的关键。

**************************************************************

第六章  抽象类

1。它代表一个抽象概念,它和接口一样,是一个等级结构的起点。但这点上它不如接口好。
2。继承都是从抽象类开始的。抽象类是用来继承的,而具体类不是用来继承的。具体类应该使用聚合的方法实现重用,而避免使用继承来实现。

例子:类B继承类A ===》写个接口或抽象类C,类A和类B实现C。
      类“猫”继承“虎”===》他俩都实现“动物”接口

3。在一个从抽象类到多个具体类的继承关系中,共同的代码应当尽量移动到抽象类里。换句话说,共同的代码应当尽量向等级结构上方移动。
反之,抽象类应当拥有尽量少的数据,数据应放在等级结构低端,即具体类中定义。

4。依赖倒转原则:针对抽象类编程,不针对具体子类编程。

5。扩展超类,不要修改超类的方法,不建议使用重写。

*************************************************************

第八章 依赖倒转原则

1。要依赖于抽象,不要依赖于实现。把抽象层次作为复用的重点,而不是具体层次。

2。三种偶合关系:
零偶合:两个类没关系
具体偶合:发生在两个具体的类,由一个类对另一个具体的类直接引用。
抽象偶合:发生在一个具体类和一个抽象类,更具灵活性。(好)

客户类尽量和抽象层打交道。

3。依赖倒转原则的两种表述:
抽象不应当依赖于细节,细节应当依赖于抽象;
要针对接口编程,不要针对实现编程。(重点)

4。针对接口编程:应当使用java接口和抽象java类进行变量的类型声明,参量的类型声明,方法的返还类型声明,以及数据类型的转换等。
不要针对实现编程:不应当使用具体java类进行变量的类型声明,参量的类型声明,方法的返还类型声明,以及数据类型的转换等。

5。一个具体java类应当只实现java接口和抽象java类中声明过的方法,而不应当给出多余的方法。

6。在多数情况下,一个java程序需要引用一个对象。这个时候,如果这个对象有一个抽象类型的话,应当使用这个抽象类型作为变量的静态类型。    接口 x = new 类();

7。java语言中创建一个对象的过程是违背“开闭”和“依赖倒转”原则的。因为对象被创建之后,它就确定了,不能由抽象自动寻找使用哪个对象来处理问题。

8。缺省适配模式:抽象类的唯一优点是有具体类的部分实现,接口补充了抽象类的所有缺点,所以联合使用抽象类和接口是一个很好的选择。

************************************************************

第九章  接口隔离原则

1。使用多个专门的接口比使用单一的总接口要好。
从一个客户类的角度来讲:一个类对另外一个类的依赖性应当是建立在最小的接口上的。一个接口应当简单地代表一个角色,而不是多个角色。多个演员可以同时演一个角色,就象孙悟空的孩儿一样


   本人博客的文章大部分来自网络转载,因为时间的关系,没有写明转载出处和作者。所以在些郑重的说明:文章只限交流,版权归作者。谢谢

原文地址:https://www.cnblogs.com/wzg0319/p/1673375.html