设计原则的学习心得与体会

本文探讨了软件设计的七大原则,包括开闭原则、依赖倒置原则、单一职责原则、接口隔离原则、迪米特原则、里氏替换原则和合成复用原则。这些原则旨在提高代码的灵活性、可维护性和可扩展性。作者强调,在实际开发中应根据项目需求灵活应用设计原则,以达到代码结构的平衡和优化。

一共有七大设计原则,分别为:

1:开闭原则

对扩展开放,对修改关闭。

即:不修改原有实现类,而是写新的实现类。

缺点:导致代码臃肿。

2:依赖倒置原则

高层(调用层)模块不应该依赖底层模块,二者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。

即:要面向接口编程,先顶层再细节来设计代码结构。

倒置:先框架,后细节。

3:单一职责原则

职责单一,一个Class/Interface/Method只负责一项职责。

4:接口隔离原则

用多个专门的接口,而不使用单一的臃肿的接口,客户端不应该依赖它不需要的接口。注意以下几点:

  1. 一个类对一个类的依赖应该建立在最小的接口之上。
  2. 建立单一接口,不要建立庞大臃肿的接口。
  3. 尽量细化接口,接口中的方法尽量少(不是越少越好,一定要适度)。

接口隔离原则符合我们常说的高内聚低耦合的设计思想。

5:迪米特原则(又叫最少知道原则)

主要强调只和朋友交流,不和陌生人说话。

出现在成员变量、方法的输入、输出参数中的类都可以称之为成员朋友类,而出现在方法体内部的类不属于朋友类。

6:里氏替换原则

理解为一个软件实体如果适用一个父类的话,那一定是适用于其子类,所有引用父类的地方必须能透明地使用其子类的对象,子类对象能够替换父类对象,而程序逻辑不变。

引申含义:子类可以扩展父类的功能,但不能改变父类原有的功能。

  1. 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
  2. 子类中可以增加自己特有的方法。
  3. 当子类的方法重载父类的方法时,方法的前置条件(即方法的输入/入参)要比父类方法的输入参数更宽松。
  4. 当子类的方法实现父类的方法时(重写/重载或实现抽象方法),方法的后置条件(即方法的输出/返回值)要比父类更严格或相等。

7:合成复用原则

指尽量使用对象组合(has-a)/聚合(contanis-a),而不是继承关系达到软件复用的目的。

继承我们叫做白箱复用,相当于把所有的实现细节暴露给子类。组合/聚合也称之为黑箱复用,对类 以外的对象是无法获取到实现细节的。

聚合、组合

  • 聚合:体现的是A对象可以包含B对象,但B对象不是A对象的组成部分。具体表现为,如果A由B聚合成,表现为A包含有B的全局对象,但是B对象可以不在A创建的时刻创建,生命周期可以不相同。eg:人和人的电脑。
  • 组合:如果A由B组成,表现为A包含有B的全局对象,并且B对象在A创建的时刻创建,拥有相同生命周期。eg:人和人的手。

体会

学习设计原则是学习设计模式的基础。在实际开发过程中,并不是一定要求所有代码都遵循设计原则,我们要考虑人力、时间、成本、质量。不要刻意追求完美,而是在适当的场景遵循设计原则,体现的是一种平衡取舍,从而帮助我们设计出更加优雅的代码结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值