简要介绍设计原则

类之间关系

  设计原则是为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性。设计原则是研究类之间关系的科学。所以,在介绍设计原则之前应对类之间的关系做相应的介绍。

耦合强度
  耦合程度由弱到强,依赖关系<关联关系<聚合关系<组合关系<泛化关系<实现关系。

依赖关系
  主要通过局部变量、方法参数、通过类直接调用静态方法产生的依赖。

关联关系
  通过成员变量产生依赖,两个依赖方生命周期没有影响。

聚合关系
  通过成员变量产生依赖,两个依赖方生命周期没有影响,被依赖方能被其他类依赖。

组合关系
  通过成员变量产生依赖,被依赖方生命周期随依赖方生命周期变化,被依赖方属于依赖方独有。

泛化关系
  通过子类继承父类产生依赖,属于强依赖。

实现关系
  通过实现接口产生依赖。

聚合关系和组合关系的区别
  聚合关系和组合关系的主要区别在于聚合关系被依赖对象不随依赖方变化而变化,而组合关系被依赖对象的生命周期是依附于依赖方得。


设计原则

   作为软件开发人员的我们,每天面对的都是变化,为了应对开发过程中的变化而做出积极响应,我们在设计时应遵循设计原则,从而使修改维护变得简单可靠。
 在软件设计中,抽象很少有变化,而实现可能会不同,所以应该提炼抽象,封印实现,削弱类之间的强依赖方式,减少类之间依赖层次。力求做到“高內聚,低耦合”。下面介绍解决此类问题的7种设计原则。


开闭原则

  开闭原则定义是对扩展开放,对修改关闭。开闭原则实现方法是“抽象约束,封装变化”。通过接口和抽象类为软件定义一个相对稳定的抽象层,而将扩展和封装到具体的实现类中。开闭原则的好处在于定义一个稳定的抽象层,而在代码依赖中依赖抽象。在应对改变时,具体的实现对于依赖方来说是透明的,所以变化的只是实现,依赖方变动很少,从而加大生产效率。


里氏替换原则

  里氏替换原则确保父类的性质在子类中依然成立。里氏替换原则阐述的是继承之间的关系,里氏替换原则提倡的是在继承中只是对父类的扩展,尽量不要重写父类的方法。里氏替换原则保证在父类能用的地方子类也同样能实用,而子类覆盖父类的方法导致程序错误,这应该重新整理类之间的继承关系。里氏替换原则是实现开闭原则的重要途经,他保证继承的可复用性,降低程序出错的可能性。


依赖倒置原则

  依赖倒置原则提出模型或者类之间应该依赖高层抽象,而高层抽象不应该依赖细节。具体的实现方法是面向接口编程,而不是依赖具体的实现编程。在面向对象编程中,一般抽象层是相对稳定的,而具体的实现层则是变化的。依赖倒置原则提出具体的依赖应该是抽象层,所以它减少了并行开发引起的风险,提高代码的可读性和可维护性,它降低了类之间的耦合关系。是实现开闭原则的重要途经。


单一职责原则

  单一职责原则指出类的变化原因,一个类应该只有一个引起它变化的原因,否则这个类应该被拆分。如果一个类的职责过多,那么一个功能引起这个类变化,而可能抑制类的其他功能。同样,在需要一个职责的地方,不得不实现类的其他职责,产生了大量的代码冗余,使得类的可复用性和可维护性变差。所以遵守单一职责原则,可保证代码的可读性、可维护性。


接口隔离原则

  接口隔离原则要求开发人员把庞大、臃肿的接口拆分为功能独立、模块清晰的多个接口供具体的实现使用。接口隔离原则将接口拆分,增大程序的灵活性。庞大、臃肿的接口拆分为单个、独立的接口,在通过接口的继承实现多个接口的整合,体现抽象的层次性。为实现细节提供独立的接口定义,将类之间的实现关系转换为依赖关系,降低程序的耦合性。
  接口隔离原则和单一职责原则的区别:单一职责原则阐述的是具体实现,针对的是程序具体的实现;而接口隔离阐述的是接口,针对的是程序的抽象和整体。


迪米特法则

  迪米特法则又称最少知道原则,迪米特法则指出发生方法调用的地方应该是直接和类有关联的对象。这些能调用的地方包含当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等。这些对象同当前对象存在关联、聚合或组合关系,可以直接访问这些对象的方法。迪米特法则强调只依赖于当前类拥有的成员,所以减低了类之间的耦合性,增大了代码的可复用性。
  迪米特法则的实现,主要从依赖者和被依赖者角度出发,依赖者只依赖和自己相关联的依赖,被依赖者只提供相关的接口(方法)。在类的划分上,应该创建弱耦合的类。类与类之间的耦合越弱,就越有利于实现可复用的目标。在类的结构设计上,尽量降低类成员的访问权限。在类的设计上,优先考虑将一个类设置成不变类。在对其他类的引用上,将引用其他对象的次数降到最低。不暴露类的属性成员,而应该提供相应的访问器(set 和 get 方法)。谨慎使用序列化(Serializable)功能。


合成复用原则

  合成复用原则要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。复合复用原则是将可能的继承关系转变为依赖关系,与继承关系相比,采用聚合、组合关系,能保证被依赖方的封装性。因为依赖方唯一能操纵被依赖方的方式是通过方法调用,被依赖方的改变不会过多得影响依赖方,减少类之间的耦合性。依赖方可以替换被依赖方,增加系统的灵活性。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值