面向对象的设计通常涉及两个元素:接口、类以及它们之间的协作。 接口的设计需要考虑接口隔离原则类的设计。 类本身的设计需要考虑,必须考虑类的职责是否为单一。 在具有继承关系的类设计中,目标是注意子类是否更改父类的方法,而不更改。 子类必须只扩展父类的行为(大气的帆布鞋替换原则,开闭原则),以尽量减少将来子类更改的影响。 协同关系设计:进行顶层框架设计时,协同是接口间的关系,接口间的调用(依赖倒置原则),一个类需要与其他类有调用关系时,协同是调用关系
笔记-设计模式禅(美丽冬著)六大原则
1 .单一职责原则
singleresponsibilityprinciplesrp原则
分清职责,界面一定要做到单一职责,方法也要做到,班级要尽量做到
定义:单一职责原则是指应该且只有一个原因引起班级变动。
2 .大气换运动鞋原则Liskov Substitution Principle LSP原则
定义:引用基类的所有位置都必须能够透明地使用该子类的对象。 简单地说,父类可以出现的地方的子类可以出现,但不能相反。 子类可以扩展父类的功能,但不能更改父类的原有功能。
大气帆板交换原则为良好的继承定义了规范
在类中调用其他类时,必须使用父类或接口,如果父类或接口不可用,则表示类的设计违反了LSP原则。
我们在设计系统时,经常定义接口或抽象类并对实现进行编码,调用类直接传递给接口或抽象类,对具体的实现不感兴趣
如果子类不能完全实现父类的方法,或者父类的某些方法在子类中“扭曲”,则建议使用依赖、聚合、组合等关系来代替继承。
在项目中采用大气帆板置换原则时,尽量避免子类的个性,如果子类中存在个性这个子类与父级的关系,就很难协调。
定义有四种含义:
1 )子类可以实现父级抽象方法,但不能写父级的非抽象方法。 在父类中实现的所有方法实际上都为抽象方法设置了一组规范和合同。 这并不强制所有子类都必须遵守这些合同,但如果子类任意修改这些非抽象方法,则会破坏整个继承体系。
2 )可以向子类添加自己的方法。
3 )编写或实现父类的方法时,可以扩大输入参数。 )复盖是指写入和重写通常的方法,实现是指实现接口和抽象的方法() )。
4 )在编写或实现父类方法时可以缩小输出结果(放大后可以用子类替换父类吗? ) )
3 .倒置原则依托dependenceinversionprincipledip原则
定义:
1 )上层模块不应该依赖下层模块
2 )抽象不应该依赖细节
3 )细节依赖于抽象
在Java中,表现为面向接口的编程OOP
1 )模块之间的依赖通过抽象产生,类之间不发生直接的依赖关系,该依赖关系通过接口或者抽象类产生
2 )接口和抽象类不依赖于实现类
3 )实现类依赖于接口或抽象类
依赖倒置原则可以减少类间的耦合性,提高系统的稳定性,降低并行开发带来的风险。
并行开发需要解决模块之间的依赖关系,而依赖倒置原则正好解决这个问题。
在Java中,只要定义变量就一定需要类型。 一个变量有两种类型。 表面型和实际型。 UserDao是表面型,UserDaoImpl是实际型。
选项卡页面上创建或编辑条目。 依存是会传达的。 如果抽象地依赖的话,多层依赖也没关系。
1 )构造函数传递依赖对象
2 ) Setter方法传递依存对象
3 )将依赖对象引入接口方法
最佳做法:
1 )每个类都尽量有接口或抽象类
2 )变量的表面类型尽量是接口或抽象类
3 )不从特定类派生
4 )只是用尽量不写基类的方法来实现
倒置的概念是所谓的抽象依赖。
4 .接口隔离原则interfacesegregationprincipleisp原则
将肥大化的接口变更为2个独立的接口所依赖的原则是连接
口隔离原则;定义:
客户端不应该依赖它不需要的接口
类间的依赖关系应该建立在最小的接口上;
根据接口隔离原则拆分接口时,首先必须满足单一职责原则;
接口要高内聚,高内聚就是提高接口、类、模块的处理能力,减少对外交互。
定制服务,为不同的用户定制不同的服务
接口设计要适度,各方都要照顾。
接口和类尽量使用院子接口或原子类来组装,但是这个原子接口或原子类该怎么组装,是一个难题。在实践中可根据以下标准来衡量:
1)一个接口只服务于一个字模块或业务逻辑
2)通过业务逻辑压缩接口中的public方法
3)已被污染的接口尽量去修改,若变更风险大,可用适配器模式进行转化处理
4)了解业务背景,避免生搬硬套模式。
开发中只能根据,经验和开朗的老鼠来判断接口粒度的大小。
5. 鲜艳的山水法则
Law of Demter LoD
也称为最少知识原则:Least Knowledge Principle LKP
描述的是,一个对象应该对其他对象有最少的了解,一个类只需要知道自己需要耦合或者调用类的public方法即可。
尽量保证风险的不扩散,修改的地方越少,代码就越好。
一个类公开的public方法越多,修改时涉及的面也越大,变更的风险也越大。
只和朋友交流:
朋友类的定义:出现在成员变量、方法的输入输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类,鲜艳的山水法则告诉我们,一个类 只和他的朋友类做交流,老师和体育委员交流、体育委员和学生交流。
在实际中如果遇到,一个方法放在本类中也可以,放在其他类中也合适,那么你可以坚持这样一个原则:如果一个方法放在本类中,既不增加类间关系,也 对本类不产生负面影响,那就放置在本类中。
鲜艳的山水法则的核心观念就是类间的解耦,弱耦合。但是也要衡量,既要让结构清晰,又要高内聚低耦合。
我们在使用原则时,要反复衡量。
6. 开闭原则
Java世界里最基础的设计原则
定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。
根据3W原则介绍
什么是开闭原则?
软件实体包括:项目或者软件产品中按照一定的逻辑规则划分的模块。
抽象和类
方法
一个软件产品在开发周期内,肯定会有变化,我们的设计应该尽量适应这些变化,开闭原则则告诉我们尽量通过扩展软件实体的行为来实现变化,而不是修改已有的代码来完成变化。
为什么使用开闭原则? – 重要性
前五章介绍的原则都是开闭原则的具体形态,开闭原则是精神领袖。
对测试的影响
可提高复用性
可提高可维护性
面向对象开发的要求
如何使用开闭原则?
开闭原则是非常虚的一个原则;
抽象约束、元数据控制模块行为、制定项目章程、封装变化;
封装变化有两层含义,第一将相同的变化封装到一个接口或抽象类中;第二,将不同的变化封装到不同的接口或抽象类中。23种设计模式都是从各个不同的角度对变化进行封装的;
总结:
Single Responsibility Principle
Open Closed Principle
Liskov Substitution Principle
Law of Demeter
Interface Segregation Principle
Dependence Inversion Principle
这六个字母联合起来 Solid 稳定的;
</div> </div> 转载来源 https://blog.csdn.net/guolong1983811/article/details/69791758