设计模式

设计模式七大原则

设计模式目的

为了让程序有更好的耦合性,内聚性,可维护性,可扩展性,重用性和灵活性等

  • 耦合性

    低耦合

  • 内聚性

    高内聚

  • 可维护性

    对某一个功能维护不影响其余功能

  • 可扩展性

    需增加新功能时很方便,且不影响原来的功能

  • 重用性

    相同功能代码不必多次编写

  • 灵活性

    可扩展可维护

  • 可读性

    编程规范,易于其他程序员阅读和理解

七大原则

  1. 开闭原则

用抽象构建架构,用实现扩展细节

保证以前代码的准确性,使开发者更专注于新扩展的代码上.mvc设计模式中的dao层和service层完美体现

  1. 里氏替换原则

在引用父类的地方,都可以替换为其子类。从而可以实现子类间的动态切换。

在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象,开闭原则实现的手段之一

  1. 依赖倒置原则

针对接口编程,抽象不依赖于细节,细节应依赖于抽象

一般开闭原则,里氏替换原则,依赖倒转原则会同时出现,开闭原则是目标,里氏替换原则是基础,依赖倒转是手段

  1. 单一职责原则

单个接口或类不应该有多个职责,应该尽可能的划分职责,通过组合的方式,完成更为复杂的业务.

一个类只负责一个功能,降低类的复杂度,当修改一个功能时,降低对其他功能的影响,提高类的可读性

  1. 接口隔离原则

一个接口不要包含过多的职责,应合理划分,跟单一职责原则相辅相成

当一个接口方法太多时,我们需要把他拆分成更小的接口,但不能违反单一职责原则,每个接口应该承担一种相对独立的角色功能,因为继承接口的类需要实现该接口所有的方法,如果接口方法过多,会导致类去实现不需要的功能,非常冗余

  1. 迪米特法则

也就最少知道原则,一个对象尽量让其它对象保持最少的了解,即一个实体应当尽量少的与其他实体发生相互作用

应该尽量减少对象之间的交互,如果两个对象之间不必彼此直接通信,那么这两个对象就不应当发生任何直接的相互作用,如果其中的一个对象需要调用另一个对象的某一个方法的话,可以通过第三者转发这个调用

  1. 合成复用原则

多用组合,少用继承

就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象通过这些对象的委派达到复用已有功能的目的

UML类图

UML即统一建模语言(Unified Modeling Language)

单个类图

  • 分为三层

    • 最上面一层展示类名(如果是接口,接口名上用<<interface>>字符来表示)

    • 第二层展示类的属性,格式为:

      权限 属性名:类型 [=默认值]
      权限 + 代表 public
      	# 代表 protected
      	~ 代表 default
      	- 代表 private
      如:
      	private String name;
      	-name:String
      
    • 第三层为方法, 格式为:

      权限 方法名称(参数列表) [:返回类型]
      如:
      	public void setName(String name) {
              this.name = name;
          }
      	+setName(String name):void
      

类与类之间的关系

类与类之间的关系主要有泛化(Generalization),实现(Realization),依赖(Dependence),关联(Association),聚合(Aggregation)和组合(Composition)这几种

  • 泛化关系(Generalization)

    泛化在java里的体现即为子类继承父类

    在UML中用空心三角形直线表示,空心三角形指向父类

  • 实现关系(Realization)

    在java里的体现即为类实现接口

    在UML中用空心三角形虚线表示,空心三角形指向被实现的接口

  • 依赖关系(Dependence)

    在java中,一般为以局域变量、方法的形参,或者对静态方法调用的方式去依赖另外一个类

    在UML中用带箭头的虚线表示,箭头指向被依赖的类

  • 关联关系(Association)

    在java中,一般为成员变量,即一个类为另外一个类的成员变量,有单向关联和双向关联两种

    在UML中用单向关联用带箭头的实线表示,箭头指向被关联的类,双向关联用不带箭头的直线来连接两个互相关联的类

  • 聚合关系(Aggregation)

    聚合关系是关联关系的一种,是强的关联关系,是整体和个体之间的关系

    在java中也是实例变量,类似于车子类和引擎类,车子类关联引擎类,这时候车子类和引擎类就为聚合关系,车子为整体,引擎为局部,

    即一个类用到了另外一个类的全部

    在UML中用带空心菱形的直线表示,空心菱形指向整体

  • 组合关系(Composition)

    组合关系是关联关系的一种,是比聚合关系强的关联关系.当集合关系中的整体类负责部分类对象生命周期的时候就为组合关系,组合关系是不能共享的.代表整体的对象需要负责保持部分对象和存活,在一些情况下将负责代表部分的对象湮灭掉.代表整体的对象可以将代表部分的对象传递给另一个对象,由后者负责此对象的生命周期.换言之,代表部分的对象在每一个时刻只能与一个对象发生组合关系,由后者排他的负责生命周期.部分和整体的生命周期一样.

    在java中也是实例变量表示,一般来说,为了达到组合关系,会用构造方法初始化的形式来达到目的,例如汽车类和司机类,当车子没了,司机也没办法当司机了

    在UML中用带实心的菱形直线表示,其中实心菱形指向整体

依赖、关联、聚合、组合这几种关系的耦合度是越来越强的:组合>聚合>关联>依赖。

posted @ 2021-08-07 12:19  Zzzy君不见  阅读(51)  评论(0)    收藏  举报