美文网首页
读《Design Patterns by Tutorials》笔

读《Design Patterns by Tutorials》笔

作者: Beyond_JG | 来源:发表于2018-08-25 12:37 被阅读93次

    在学习设计模式之前,需要先来学习 UML 图。为什么先要学习 UML 图呢?因为后面的设计模式,我们都可以用一幅 UML 图来表示,所以当我们看到一幅 UML 图,就可以明白这是什么设计模式。然后如何用代码去实现它。

    什么是 UML 图

    UML 图包含类、协议、属性、方法和关系。
    一个方块表示一个类。下面有一个非常简单的类 Dog:


    Dog

    为了表示一个类继承另外一个类,使用一个空心箭头:


    继承
    但是我们通常不把空心箭头叫做“inherits from”,而是叫成“is a”,例如:可以用下面的图表示 SheepDog 继承自 Dog 。
    image
    我们可以这样来理解这个图“SheepDog 是一个 Dog”。

    在 UML 中使用一个简单的箭头表示属性,在 UML 中叫做“关联”。


    image
    通常把属性这个箭头叫做“has a”,比如下图:
    image
    也可以通过在箭头下面描述一个区间来表示一对多的关系,如下图表示一个 Farmer 有好多 Dog:
    image
    可以在一个 UML 图中使用多个箭头和方块,下面这个图表示一个 Farmer 有一个 SheepDog,这个 SheepDog 是一个 Dog。
    image
    在 UML 图中,也可以使用方块表示一个协议,为了区别类,需要在协议名前面加上<<protocol>>。
    下图表示一个 PetOwning 协议:
    image

    使用一个空心箭头和虚线来表示一个类遵守了一个协议:


    image
    你可以把它理解成“实现”或者“符合”。
    使用一个普通箭头和虚线来表示依赖。ULM 有意模糊依赖的概念。因此,无论什么时候使用依赖的关系都应该注释上使用的目的。比如,可以使用依赖箭头表示以下情况:
    • 一个 weak 属性或者 delegate;
    • 一个作为参数传递给一个方法的对象,并且没有作为属性引用;
    • 一种松耦合或者回调,比如:一个从 view 到 controller 的 IBAction

    下图表示 Dog 代理到 PetOwning 对象:


    image

    也可以在 ULM 中表示属性和方法,例如,下图表示 PetOwning 协议有一个 name 属性和 petNeedsFood(_:)方法:


    image
    如果一个箭头的意义很明确,可以删除一些解释性文字,通常可以删除继承,属性和实现的解释文字。然而,应该保留依赖的文字。因为,他们的意义通常不太明确。
    下面是一副表示 Farmer 和 Dog 的完整的 UML 图。Dog 代理到 PetOwning 对象。
    image

    UML 图是学习设计模式得基础,我们已经简单学了一些基础的 UML 图。下面将去学习一些设计模式。

    相关文章

      网友评论

          本文标题:读《Design Patterns by Tutorials》笔

          本文链接:https://www.haomeiwen.com/subject/trtgiftx.html