swift 原型模式

2021-08-15 17:55:32 字數 3495 閱讀 8991

設計模式(design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、**設計經驗的總結。gof提出了23種設計模式,本系列將使用swift語言來實現這些設計模式。

概述

通過複製乙個已存在的物件來獲得乙個新的相同型別的物件被稱作原型模式,在複製的過程中不需要關心被複製物件實現的介面或者型別。

原型模式prototype具有如下優點:

簡單來說,原型模式分為以下兩種:

沒有使用原型prototype的拷貝**是怎樣的呢?我們需要通過訪問

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

class pet: nsobject

}

class person: nsobject

}

let pet = pet(name:"球球", weigh: 2.0)

let author = person(name:"林欣達", height: 173, pet: pet)

varpersons: [person] = [person]()

for_in0...9

簡單形式拷貝

通過宣告乙個cloning協議來為需求方提供完全拷貝的方案

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

protocol cloning

class pet: nsobject, cloning

}

class person: nsobject, cloning

}

let author = person(name:"林欣達", height: 173, pet: pet(name:"球球", weigh: 2.0))

varpersons: [person] = [person]()

for_in0...9

簡單點來說,原型模式在ios開發中就是nscopying協議,通過實現這個協議完成物件和其成員物件的完全記憶體拷貝,也可以稱為深拷貝。從這個角度而言,原型模式prototype就是深拷貝的理論化

登記拷貝

登記拷貝實際上就是在簡單拷貝的基礎之上對這些clone物件進行管理

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

class clonemanager: nsobject

func store(prototype: cloning,foridentifier: string)

func prototype(foridentifier: string) -> cloning?

func remove(withidentifier: string)

}

class viewcontroller: uiviewcontroller

ifclone != author

clonemanager.sharedmanager.remove(with:"cloneinstance")

assert( clonemanager.sharedmanager.prototype(for:"cloneinstance") == nil )

}

}

總結

原型模式prototype將物件和其成員物件的拷貝過程隱藏起來,只提供了乙個簡單的介面提供我們獲取拷貝後的物件,是一種優雅而強大的設計。使用原型模式需要注意實現cloning的物件其成員物件也應該遵循這個協議提供簡單的拷貝介面。

建立型模式 原型模式

使用原型例項指定建立物件的種類,並且通過轉殖這些原型建立新的物件 原理是將乙個原型物件傳給要發動建立的物件,該物件通過請求原型物件轉殖自己來建立過程 轉殖方法 public prototype clone jdk中為我們提供了轉殖的方法clone 從object繼承下來,乙個物件要實現轉殖,需要實現...

建立型模式 原型模式

原型 prototype 模式主要用於建立物件的轉殖,通常其最簡單的形式就是採用自定 clone 函式並 傳入物件引數以返回此物件的乙個副本,這在 python 實作上可使用內定 copy.cop y 或 copy.deepcopy 函式來達到此目的。當已有乙個物件但對此物件的某些部分會被變更卻又想...

原型模式 建立型模式

文章首發個人部落格 如果我們有乙個類 sheep 它裡面有兩個屬性,名稱 name 年齡 age 現在我們有乙個它的例項 s1 我們需要按照這個例項的屬性再去建立兩個物件。1 sheep data public class sheep 2 main public class main 原型模式 用原...