设计模式学习笔记(一)

设计模式学习笔记(一)

参考资料

图说设计模式

《Head First 设计模式》

概念

软件模式是将模式的一般概念应用于软件开发领域,即软件开发的 总体指导思路或参照样板。软件模式并非仅限于设计模式,还包括 架构模式、分析模式和过程模式等,实际上,在软件生存期的每一 个阶段都存在着一些被认同的模式。

学习设计模式的必要性

  • 模式能够使用更少的词汇做更充分的沟通。模式词汇不止是词汇名称,而是一整套模式背后所象征的质量、特征、约束
  • 使用模式谈论软件系统,可以让你保持在设计层次,不会被压倒到对象与类这类琐碎的事情上面
  • 团队了解设计模式,彼此之间对设计的看法不容易产生误解。学习设计模式,可以帮助新人向有经验的开发人员看齐
  • 设计模式的核心原则是为了应对变化点

如何使用设计模式

  • 我们都使用别人设计好的库和框架编写程序。编写 Java 程序时,我们只需要了解 Java API 及它所带来的功能,从库和框架中挑选所要的组建,把它们放进合适的地方。但是,库与框架无法帮助我们将应用组织成容易了解、容易维护、具有弹性的构架,所以需要设计模式。

  • 许多库和框架本身会用到设计模式,了解了设计模式,会更容易了解这些 API 是围绕这设计模式构造的

学习设计模式需要达到的三个层次

  1. 能在白纸上画出所有的模式结构和时序图
  2. 能用代码实现;如果模式的代码都没有实现过,是用不出来的;即所谓,看得懂,不会用
  3. 灵活应用到工作中的项目中

UML 类图

维基百科 — UML 类图

图解设计模式 — UML类图

UML类图几种关系的总结

UML 类图提供机制,以代表类的成员,如属性和方法,对他们的其他信息。

指定一个类成员(即任何属性或方法)的可见性有下列符号,必须摆在各成员的名字之前:

符号可见性
+公有
-私有
#保护(即对子类可见)
~包(即对包内其他成员可见)
/推导(即由其他属性推导得出,不需要直接给定其值)
底线静态成员

实例层级的关系

  1. 泛化关系 (Generalization)

    • 即继承的反方向,指的是一个类(称为父类、父接口)具有另外的一个(或一些)类(称为子类、子接口)的共有功能。子类可视为其父类的特例,并可添加自己的新功能
    • 用带空心三角形箭头的实线表示
    • Java 中 extends 标识
  2. 实现(Realization)

    • 指的是一个类实现接口(可以是多个)的功能
    • 用带空心三角形箭头的虚线表示
    • 在 Java 中通过关键字 implements 明确标识
  3. 依赖(Dependency)

    • 可以简单的理解为一个类A使用到了另一个类B(use-a)。这种使用关系是具有偶然性、临时性的、非常弱的,但是B类的变化会影响到A
    • 用带燕尾箭头的虚线表示
    • 表现在代码层面,为类B作为参数被类A在某个method(方法)中使用
  4. 关联(Association)

    • 某个对象长期的持有另一个对象的引用(has-a 关系);关联关系使一个类知道另外一个类的属性和方法
    • 带燕尾箭头的实线表示
    • 在代码层面上,被关联类以类属性的形式出现在关联类中,也可能是关联类引用了一个类型为被关联类的全局变量
  5. 聚合(Aggregate)

    • 表示整体与部分的一类特殊的关联关系,是“弱”的包含(“owns a” )关系;,成分类可以不依靠聚合类而单独存在,可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享(sharable)。如图书馆包含学生和书籍
    • 图形以空心的菱形箭尾与实线来表示
  6. 组成(Composition)

    • 强的聚合关系( is a part of )。整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束。例如公司与公司部门的关系
    • 以实心的菱形箭尾与实线表示

类层级的关系

  1. 概括(Generalization)

    • 指类与类之间的共通性
    • 图形以实线和空心箭头来表示
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值