《java与模式》读书笔记 ----模式设计的原则
2008-01-05 08:46:51 来源:WEB开发网核心提示:里氏代换原则LSP概念:一个软件实体假如使用一个父类的话,那么一定适用于其之类,《java与模式》读书笔记 ----模式设计的原则,而且不能觉察出父类和子类的区别,里氏代换原则是继续复用的基石,应当创建弱耦合的类,类之间的耦合性越低,只有当衍生类可以替换掉基类,软件单位不会受到影响时
里氏代换原则----LSP
概念:一个软件实体假如使用一个父类的话,那么一定适用于其之类,而且不能觉察出父类和子类的区别。
里氏代换原则是继续复用的基石。只有当衍生类可以替换掉基类,软件单位不会受到影响时,基础类才真正被复用,而衍生类才能在基础类上增加新的行为。
java中的上塑造型既是里氏代换原则的体现。
依靠倒转原则-----Dip
狭义依靠关系。
依靠关系(Dependency)类与类之间的一种连接,依靠总是单向的。一各类依靠于另一各类的定义。一个人(Person)可以买车(Car)和房子(House),Person类依靠于Car类和House类。
一般而言依靠关系在Java中体现为局部变量、方法参数以及对静态方法的调用。换言之,一个类A的某一个局部变量的类型是另一个类B,那么A类就依靠于B类;假如一个方法的参数是另一个类B的实例,那么这个类A就依靠于B类;假如A类调用B类的静态方法,那么A类依靠于B类。
广义的三种依靠关系。这里依靠又称耦合
l 零耦合关系(Nil Coupling)。两个类没有耦合关系。
l 具体耦合关系(Concrete Coupling)。具体性的耦合关系发生在两个具体类(可实例化的)之间,经由一各类对另一个类直接应用造成。
l 抽象耦合关系(Abstract Coupling)。抽象耦合关系发生在一个具体类和一个抽象类(或接口)之间,使两个必须发生关系的的类之间存在最大的灵活性。
依靠倒转原则含义:抽象不应当依靠于细节,细节应当依靠与抽象。
依靠倒转原则要求:要针对接口编程,不要针对实现编程。
针对接口编程的意思是说:应当使用java接口和抽象类进行变量类型的声明、参数类型的声明、返回类型的声明、数据类型的转换等。
要保证这一点:一个具体类应当只实现接口和抽象类中声明的方法,而不应当给出多余的方法。
List employees = new Vector();
其中: List 称变量employees的静态类型。
Vector称变量employees的实际类型。
在很多情况下,一个java程序需要引用一个对象。这个时候,假如这个对象又一个抽象类型的话,应当使用这个对象的抽象类型作为变量的静态类型。------这就是针对接口编程的具体含义。
接口隔离原则----------ISP
含义:使用多个专门的接口要比使用单一的总接口要好!
从客户类角度上看:一个类对另外一个类的依靠性应当是建立在最小的接口之上。
接口的划分直接带来类型的划分。
目标就是不向客户类提供不必要的行为。
合成聚合复用原则--------CARP
关联,聚合、合成。
合成和聚合都是关联的非凡种类。聚合表示“拥有”关系或整体与部分的关系;而合成则是用来表示一种强的多的 “拥有”。在一个合成的关系里,部分和整体的生命周期是一样的。一个合成的新的对象完全用又对其他组成部分的支配权。包括他们的创建和湮灭。组合而成的对象对组成部分的内存分配、内存释放有绝对的责任。
进一步讲。一个合成的多重性不能超过1,换言之,一个合成的关系中,部分对象不能于另一个合成关系对象共享。
合成通常理解为:值的聚合。而聚合则是:引用的聚合。
合成和聚合是将已有的对象纳入到新的对象中,使之成为新对象的一部分,因此新的对象可以调用已由对象的功能。达到复用的目的。
优点:
l 新对象存取成分对象的唯一方法是通过成分对象的接口。
l 这种复用是黑箱复用,隐藏了成分对象的内部细节。
l 这种复用支持包装。
l 这种复用依靠性较小。(耦合度低)
l 每一个新类可以将焦点集中在一个任务上。
l 这种复用可以在运行时动态进行。新对象可以动态引用于成分对象类型的子对象。
缺点就是:
通过这种复用建造的系统通常会有较多的对象需要治理。
“合成聚合复用可以替代继续复用完成任一项功能。”
尽管继续是一种非常重要的手段但是,应当首先考虑合成聚合。
迪米特法则------LoD
又叫最少知识原则:一个对象应当对其他对象尽可能少的理解。
几种表述:
l 至于你直接的朋友们通信。
l 不要跟“生疏人”说话。
l 每一个软件单位对其他单位用有尽可能少的知识,而且局限于那些于本单位密切相关的软件单位。
关于“朋友”的约定:
l 当前对象本身(THIS)。
l 以参数形式传入到当前对象方法中的对象。
l 当前对象的实例变量直接引用的对象。
l 当前对象的实例变量假如是个聚集那么聚集中的元素也是“朋友”。
l 当前对象创建的对象。
广义迪米特法则
软件系统中,一个模块设计的好不好最主要、最重要的标志,就是该模块在多大程度上将自己的内部数据和其他实现细节隐藏起来。一个设计好的模块可以将它所有的实现细节隐藏起来,很彻底的将提供给外界的API和自己的实现分离开来。这样一来模块于模块之间的通信仅仅通过彼此的API,而不理会模块内部的工作细节。这便是:“信息的隐藏”—“封装”。
广义迪米特法则要求:
l 在类的划分上,应当创建弱耦合的类。类之间的耦合性越低,越有利于复用。
l &nbs
更多精彩
赞助商链接