王朝网络
分享
 
 
 

《java与模式》读书笔记 ----模式设计的原则

王朝java/jsp·作者佚名  2006-01-31
宽屏版  字体: |||超大  

里氏代换原则----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 在类的设计结构上,每一个类都应尽可能的降低成员的访问权限。

l 在类的设计上,只要有可能一个类应当设计成不变类。(final)。

l 在对其他类的引用上,各对象对其他对象的引用应降到最低。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有