1、开闭原则(open closed principle):
1988年勃兰特 梅耶在自己的书《面向对象软件构造》中提出的。
对于软件实体(模块,类,接口,方法)来说,对扩展开放,对修改关闭
遵循这样的原则好处:
测试简单,只需要测试新的,旧的功能没有修改代码,所以不用测试
可复用性
可扩展性
实现的方法:
抽象约束,封装变化
相对稳定的抽象层用接口
变化相同的封装到一个类里
2、里氏替换原则(liskov substitution principle):
1987年liskov在会议oopslv会议上的报告《数据抽象和层次》中提出。
子类可以扩展父类的功能,但是不能改变父类原有的功能
例如:
动物类-》鸟类-》燕子
但是如果是鸵鸟继承鸟类的话,无法实现鸟类的飞行功能,所以不能继承鸟类只能继承动物类
3、依赖倒置原则(dependence inversion principle):
1996年Object mentor公司总裁罗伯特 马丁提出
高层模块不应该依赖底层模块,两者都应该去依赖抽象层。抽象不应该依赖细节,细节要依赖抽象
一定要以抽象(接口)为基础搭建架构。软件架构的时候,先定义好要用到的接口,具体开发过程再去实现接口
实现方法:
1)、每个类尽量提供接口和抽象类,或者两者兼备
2)、变量的类型,尽量是接口或则抽象类
3)、任何类都不应该从具体类派生
4)、继承时尽量遵循里氏替换原则
4、单一职责原则(single responsibility principle)
由罗伯特C马丁在书《敏捷软件开发:原则、模式、实践》中提出。
一个类应该有且仅有一个引起他变化的原因,否则类应该被拆封
优点:可读性提高,变更容易
5、接口隔离原则(interface segregation principle)
2002年罗伯特C马丁提出
尽量将臃肿庞大的接口拆封成更小更具体的接口
实现方法:
1)、接口尽量小,但要有限度
2)、接口中屏蔽不需要的方法
3)、根据业务拆分接口
4)、提高内聚,减少更多接口的交互
6、迪米特法则(law of demeter)(也叫最少知识原则(leaat knowledge principle))
1987年美国东北大学(northEastern university)迪米特研究课题中提出
只与你的朋友交谈,不和陌生人说话
实现方法:
1)、类和类之间创建弱耦合的类(在明星类和粉丝类之间建立经纪人类)
2)、降低类的访问权限
3)、谨慎使用序列化功能,会引发很多问题?
4)、将引用其他对象的次数降到最低
7、合成复用原则(composite reuse principle)
优先使用组合聚合的关系实现,其次使用继承关系
继承破坏了类的封装性,但是复用不会
实现方法:
将已有的对象纳入新的对象中。新对象调用已有对象的功能
例如:汽车有电动汽油,白车黑车两种并列的属性,这样的情况就应该使用组合复用的模式。
可以在汽车类总引入颜色类。
网友评论