Design pattern 第一讲 基础知识

Design pattern 基础知识

一、基本原则

1、单一职责原则(Single Responsibility Principle)

一个对象应该只包含单一的职责,并且该职责被完整的封装在一个类中。
单一职责原理是实现高内聚、低耦合的指导方针。

2、开闭原则(Open-Closed Principle)

一个软件实体应当对扩展开放,对修改关闭。也就是说,在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,即实现在不修改源代码的情况下改变这个模块的行为。
为了满足开闭原则,需要对系统柜进行抽象化设计,抽象化是开闭原则的关键。

3、里氏代换原则(Liskov Substitution Principle)

所有引用父类的地方必须能够透明地使用其子类的对象。
通俗而言:在软件中如果能够使用父类对象,那么一定能够使用其子类对象。把基类都替换成它的子类,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类的话,那么它不一定能够使用基类。

  • 子类的所有方法必须在父类中声明,或者子类必须实现父类中声明的所有方法。
  • 在运用里氏代换原则,尽量把父类设计成抽象类和接口,让子类继承父类或者实现接口,并实现在父类中声明的方法,运行时,子类实例替换父类实例。
  • Java语言中,在编译阶段,Java编译器会检查一个程序是否符合里氏代换原则,这是一个与实现无关,纯语法上的检查,但是检查有限。

4、依赖倒转原则(Dependence Inversion Principle)

高层模块不应该依赖低层模块,他们都应该依赖抽象。抽象不依赖于细节,细节应该依赖于抽象。
即要针对接口编程,不要针对实现编程。
依赖倒转原则是指:代码要依赖于抽象的类,而不要依赖具体的类,要针对接口或者抽象类编程,而不是针对具体类编程。
实现开闭原则的关键是抽象化,并且从抽象化导出具体化实现。
依赖倒转原则的常用实现方式之一是在代码中使用抽象类,而将具体类放在配置文件中。
依赖注入(Dependence Injection)是如何传递对象之间的依赖关系,简单来说就是将一个类的对象传入另一个类,注入时应该尽量注入父类对象,而在程序运行的时候再通过子类对象来覆盖父类对象。注入有三种方式:

  • 构造注入
  • 设值注入
  • 接口注入

5、接口隔离原则(Interface Segregation Principle)

客户端不应该依赖那些它不需要的接口(方法)。
接口隔离原则是指使用多个专门的接口,而不是使用单一的总接口。
使用接口隔离原则拆分接口时,必须满足单一职责原则,将一组相关的操作定义在一个接口中,且在满足高内聚的前提下,接口中的方法越少越好。可以在进行系统设计时采用定制服务的方式,即为不同的客户提供宽窄不同的接口,只提供用户需要的行为,而隐藏用户不需要的行为。

6、合成复用原则(Composite Reuse Principle)

尽量使用对象组合,而不是继承来达到复用的目的。即尽量使用组合/聚合关系,少用继承。
白箱复用:通过继承来实现复用很简单,也易于扩展,但是继承复用会破坏系统的封装性,因为继承会将基类的实现细节暴露给子类,即基类的某些内部细节对于子类来说是可见的。
黑箱复用:组合或聚合关系可以将已有的对象纳入到新对象中,使之成为新对象的一部分,因此新对象可以调用已有对象的功能,这样做可以使得成员对象的内部实现细节对于新对象是不可见的,这种复用称为黑箱复用。
合成复用可以在运行时动态进行,新对象可以动态地引用与成员对象类型相同的其他对象。

7、迪米特法则(Law of Demeter)

狭义:如果两类之间不必彼此之间直接通信,那么这两个类就不当发生直接的相互作用。
广义:对象之间的信息流量、流向以及信息的影响的控制,主要是对信息隐藏的控制。
其意义就是一个软件应当尽可能减少与其它实体发生作用。

二、 类之间的关系

1、关联关系(Association)

最常见的一种关系,是一种结构化的关系,用于表一类对象与另一类对象之间有联系。编程语言中,通常把一个类的对象作为另一个类的属性。通常使用实线连接。

  • 聚合关系(Aggregation):表示一个整体和部分的关系,部分可以作为独立存在,比如说汽车发动机和汽车,通常使用空心菱形实线箭头表示,编程中常用SET注入;
  • 组合关系(Composition):表示一个整体和部分的关系,部分无法脱离整体,部分和整体有统一的生存期,同生共死,比如头部和嘴巴,一般使用实心菱形箭头表示,编程中使用construct注入。

2、依赖关系(Dependence)

依赖关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事务,在需要表示一个事物使用另一个事物时使用依赖关系。
大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。使用虚线箭头表示。

3、泛化(Generalization)

即继承,使用空心三角形直线表示

4、实现(Realization)

接口和其实现类之间的关系,使用空心三角形虚线表示。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值