软件设计原则

UML 图列:http://www.uml.org.cn/oobject/201211231.asp

组合关系是一种强耦合关系,拥有共同的生命周期,可以更改为接口的实现
聚合关系,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在
对扩展开放对修改关闭
单一职责原则 Single Responsibility Principle 简称SRP
1.职责要单一,应该有且仅有一个原因引起类的变更(在spring 的ico容器中,一个接口就是一个功能)
2.接口一点要做到单一,但对于实现类就需要多方面考虑,类的设计尽量做到只有一个原因引起变化。

里氏替换原则 LisKov Subsitiution Principle LSP (定义了一种良好的继承规范)
只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本不需要知道是父类还是子类,但是反过来就不行,有子类出现的地方,父类未必就能适应。
1.子类必须王权实现父类的方法
(如果子类不能完整地实现父类的方法,或者父类的某些方法在子类中已经发生“畸变”,则建议断开父子继承关系,采用依赖,组合,聚和等关系替代)
2.子类可以有自己的个性
3.覆盖或者实现父类的方法时输入参数可以被放大
4.覆写或实现父类的方法时输出结果可以被缩小

依赖倒置原则 Dependence Inversion Principle DIP
1.每个类尽量都有接口或者抽象类,或者抽象类和接口两者都具备
2.变量的表面类型尽量使是接口或者抽象类
3.任何类都不应该从具体类派生
4.尽量不要覆写基类的方法
5.结合里氏替换原则(接口负责定义public属性和方法,并且声明与其他对象的依赖关系,抽象类负责公共构造部分的实现,实现类准确的实现业务逻辑,同时在适当的时候对父类进行细化)

接口隔离原则
接口分为两种 1.实例接口,通过new关键字产生一个实例,它是对一个类型的事物的描述。 Person p = new Pserson();Pserson 就是p的接口;2.interface
尽量控制接口的粒度
客户端不应该依赖它不需要的接口,类间的依赖关系应该建立在最小的接口上。建立单一接口,不要建立臃肿庞大的接口。接口尽量细化,接口纯洁,同时接口中的方法尽量少。
接口要高内聚,定制服务
1.一个接口只服务于一个子模块或业务逻辑
2.通过业务逻辑压缩接口中的public方法,接口时常去回顾,尽量让接口达到“满身筋骨肉”
3.已经被污染乐的接口,尽量去修改,若变更的风险较大,则采用适配器模式进行转化处理
4.了解环境,拒绝盲从
迪米特法则 Law of Demeter LoD
一个对象应该对其他对象有最少的了解,降低耦合性。弱耦合可以提高复用率

开闭原则
软件实体应该对扩展开放,对修改关闭,其含义是指,一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化

 

发表评论

电子邮件地址不会被公开。