设计模式6大设计原则

1 单一职责原则

单一职责原则英文名称为Single Responsibility Principle。原话为
There should never be more than one reason for a class to change.
一个接口或类只有一个原因引起变化。也就是一个接口或类只有一个职责,它只负责一件事。有时候一个过程引起变化的原因不止一个,可以通过实现两个或以上的类接口实现单一职责。
优点:
1,类的复杂性降低,实现什么职责都有清晰明确的定义
2,可读性提高
3,可维护性提高
4,变更引起的风险降低,变更是必不可少的,如果接口的单一职责做的好,一个接口的修改只对相应的实现类有影响,对其他的接口无影响,这对系统的扩展性,维护性都有很大的提升。

2 里氏替换原则

定义和优缺点

英文名:Liskov Substitution Principle
第一种定义:If for each object o1 of type S there is an object o2 of type T such that for all programs P define in terms of T, the behavior of P is unchanged when o1 id substituted for o2 then S is subtype of T.
第二种定义:Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.
优点:
1,代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性。
2,提高代码可重用性
3,子类可以形似父类,但又异于父类
4,提高代码的可扩展性
5,提高产品和项目的开放性
缺点:
1,继承必须实现父类的所有属性和方法,降低代码的灵活性
2,增强了耦合性,当父类的常量,变量和方法被修改时,必须需要考虑子类的修改。

里氏替换原则规范

  1. 子类必须完全实现父类的方法
  2. 子类可以进行扩展
  3. 覆盖或实现父类的方法时输入参数可以被放大。子类重载父类方法时,输入参数放大时,子类的方法永远不会被执行。如果想让子类的方法运行就必须覆写父类的方法
  4. 覆写或实现父类的方法时输出结果可以被缩小

3 依赖倒置原则

英文名:Dependence Inversion Principle,DIP
High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions.
1,模块间的依赖通过抽象发生,实现类之间不发生直接的依赖,其依赖关系是通过接口或抽象类实现的
2,接口或抽象类不依赖实现类
3,实现类依赖接口或抽象类

4 接口隔离原则

定义:1. Clients should not be forced to depend upon interfaces that they don’t use.
2. The dependency of one class to another one should depend on the smallest possible interface.
根据接口隔离原则拆分接口时,首先必须满足单一职责原则。
接口要高内聚,定制服务,单独为一个模块提供专门的定制服务。而且接口设计是有限度的。

5 迪米特法则

迪米特法则(Law of Demeter, LoD)也称为最少知识原则(Least Knowledge Principle, LKP)。描述的原则即为:一个对象应该对其他对象有最少的了解。迪米特法则要求只跟朋友类交流,朋友类就是出现在成员变量、方法的输入输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类。使用迪米特法则的缺点就是尽管提高了类的复用率,但是产生了大量的中转类和跳转类,导致系统的复杂性提高,同时也为维护带来了难度。

6 开闭原则

定义:Software entities like classes, modules and functions should be open for extension but closed for modifications(一个软件实体如类,模块和函数应该对扩展开放,对修改关闭),需要说明一下的是,开闭原则是最基础的一个原则,前面五个原则都是开闭原则的具体形态,而开闭原则才是其精神领袖。
开闭原则最重要的一点就是鼓励不修改原有代码而是通过扩展原有代码应对需求变化,这样做的优点就是提高了复用性和可维护性。
如何做好开闭原则?

  • 抽象约束。第一,通过接口或者抽象约束扩展,对扩展进行边界限定,不允许出现在接口或者抽象类中不存在的public方法;第二,参数类型,引用对象尽量使用接口或者抽象类,而不是实现类;第三,抽象层尽量稳定,一旦确定不允许修改。
  • 元数据控制模块行为。如控制反转(Ioc)
  • 制定项目章程
  • 封装变化。第一,将相同的变化封装到一个接口或者抽象类中,第二,不同的变化封装到不同的接口或者抽象类中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值