码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式概论与原则 & UML类图

时间:2020-03-15 13:15:14      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:软件编程   箭头   iat   连接   其他   book   解决   head   继承   

设计模式: 对软件编程中普遍存在的问题的整体解决方案. (面向对象编程), 为了将来更好的扩展(修改)

后续所有的 Client 本身不是设计模式的一部分, 它是客户,调用这个设计模式.

为什么要用设计模式

1) 代码重用性 (相同功能的代码, 不用重复编写)

2) 可读性(编程规范性,便于其他程序的阅读和理解)

3)可扩展(当需要增加新的功能时,非常方便也称为可维护性)

4)可靠性(增加新的功能后,对原来的功能没有影响)

5)高内聚,低耦合(模块内部紧密,模块和模块之间依赖性低, 如果1个模块出了问题,不要把问题带到另一个模块)

每章内容

1. 抛出问题, 先代码实现(非设计模式方式)

2. 具体设计模式说明和解释(生活应用场景)

3. 代码实现

4. UML图 (原理与角色)

5. 具体源码应用 & 分析

原则

1. 单一职责原则

  对类来说, 一个类应该负责一个职责, 降低变更带来的风险. 如果 A 类负责2个不同的职责, 职责1, 职责2, 当职责1需求变更而改变 A 时,

  可能造成职责2执行错误,所以要将类拆分成不同职责的 A1 和 A2. 

2. 接口隔离原则

  一个类对另一个类的依赖, 应该是建立在最小的接口上. 类A 通过接口 ITarget 对类 B(实现接口的类) 有依赖, 接口中有5个方法, 但是 A 实际上

  只需要其中3个, 但是, B 需要实现全部接口中的5个方法. 

3. 依赖倒转原则

  要依赖抽象(接口 / 抽象类), A 依赖接口, B 具体实现的是接口.  因为接口稳定. 抽象的目的在于制定好规范. 而抽象不会涉及任何具体操作.

  尽量针对接口编程

4. 里氏替换原则

  用来指导继承, 里氏替换原则:引用基类的地方能透明使用其子类进行替换(子类尽量不要重写父类的方法).

5. 开闭原则OCP(最重要)

  一个类, 函数 或者模块,对扩展开放(提供方提供新方法),对修改关闭(使用方不用修改之前的代码. 说白了, 可以扩展新的, 且不用修改原有的.

  这样,当你增加新功能(扩展)时, 就不会影响之前的代码(因为没有修改),这样, 别人引用你原有代码的人就不用担心(因为没有修改)

  举例: 比如新增加一个图形时(长方形,正方形,圆形),增加新图形,对之前的没有影响.(不是通过 if-else) 

6. 迪米特法则 (降低类之间的耦合)

  一个对象应该与其他对象保持最少的了解, 迪米特法则又叫最少知道原则, 类对外提供的只能是 public 方法.  只与直接朋友进行通信.

  直接朋友的概念: B类时 A 类的成员变量, B类是 A类中某个方法的参数,  B类 是 A 类中某个方法的返回类型.

  所以, 基本上可以理解为不要在方法里定义对象(陌生类), 如果要用到, 尽量把它变成成员变量, 或者是参数传入, 或者是由返回类型需要在内部定义.

7. 合成复用原则

  尽量使用 组合 / 聚合 has-a, 尽量少的使用继承 is-a.

UML类图

在 eclipse 中, 也可以通过拖拽源码的方式, 直接把类似 class, interface 等拖拽到图形编辑框中.

类图中各种关系的含义

技术图片

Dependency 依赖: A 类指向 B类, 表示 A 使用 B 提供的方法 等. (A 也可以通过接口依赖于B类对接口的实现) 

Association关联: 表示类和类之间的连接,使得一个类知道另一个类的方法,可以是双向的. 1:1, 1:n 等

Generalization 泛化: 子类或者子接口继承父类或者父接口. (可以理解为继承关系)

Realization 实现: 是指一个类实现 一个或多个接口.

Aggregation 聚合(has-a): 表示整体与部分的关系,带菱形空心箭头的指向整体. (部分可以离开整体)

Composite 组合(has-a): 整体与部分的关系,但是部分不可以离开整体, 带菱形实心箭头的指向整体

关联关系的3种: 关联, 聚合, 组合, 实际上这3中都是关联关系, 那有什么不同呢?

Association: 普通关联关系

技术图片

 

 Aggregation 聚合, 书架上可以有 0...n 本书, 书是书架上的一部分,(即使书架上没有书, 书架也可以单独存在), 且book 也是可以独立的.

 技术图片

 

 Composite 组合, Head 类只能存在于 Human 中, 不能独立出来. (整体和部分是不可分开的(无论对主体还是部分都是一样))

技术图片

 

比如当你新建一个对象 new Human, 那么这时就必须自动实例化 Head Body 等(在类定义中, 直接实例化, 就是这种关系)

Public class Human {
  private Head head = new Head();
  private Body body = new Body();
  private Arm arm = new Arm();
  private Leg leg = new Leg();
  
}

 

设计模式概论与原则 & UML类图

标签:软件编程   箭头   iat   连接   其他   book   解决   head   继承   

原文地址:https://www.cnblogs.com/moveofgod/p/12496839.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!