設計模式(二) 原型設計模式

2021-08-17 18:13:37 字數 2179 閱讀 4017

官方定義:使用原型例項指定建立物件的種類,並通過複製這個原型建立新的物件

通俗的講就是根據乙個原型建立乙個新的物件(建立的方式實質就是拷貝原型自己),而且不需要知道新物件建立的細節

1、某些物件組合起來特別複雜,而重新建立費時又費力,此時通過拷貝能達到其目的

通過**說明問題

1、定義乙個協議

#import 

@protocol

prototypeprotocol

-(instancetype)clone;

@end

2、建立資料模型(這是乙個簡單的例子,通過這個例子說明問題)

#import 

#import "prototypeprotocol.h"

@inte***ce

studentmodel : nsobject

@property (nonatomic, strong) nsstring *name;

@property (nonatomic, strong) nsnumber *age ;

@property (nonatomic, strong) nsstring *hobby;

-(instancetype)clone;

@end

-------

#import "studentmodel.h"

@implementation

studentmodel

//實現協議

-(instancetype)clone

- (nsstring *)description

\n", self, self

.name, self

.age

.integervalue, self

.hobby];

}

3、呼叫實現

studentmodel *stu1 = [[studentmodel alloc]init];

stu1.name = @"小白"

; stu1.age = @12

; stu1.hobby = @"跑步"

; //使用常規設計模式

studentmodel *stu2 = [[studentmodel alloc]init];

stu2.name = @"小紅"

; stu2.age = @12

; stu2.hobby = @"跑步"

; //使用原型設計模式

studentmodel *stu3 = [stu1 clone];

stu3.name = @"小明"

; nslog(@"\n%@%@%@",stu1.description,stu2.description,stu3.description);

可以觀察到stu1和stu2只是名字不同,其他屬性都相同,假定stu1和stu2有很多相同的屬性值,依次賦值是一件費時費力的事,這種情況下,我們就可以用原型設計模式,如stu3的實現附log:

深複製與淺複製

原型模式可以被理解是一種深複製的行為

深複製不是複製指標值,而是複製指標所指向的資源,簡單說就是開闢了真正的記憶體複製

淺複製只是將指標複製給新物件,那麼底層的資源實際上仍然由兩個例項在共享。其實兩者指向的都是同一塊記憶體。簡單說就是只複製指標,堆記憶體不變

在cocoa touch中為nsobject的派生類提供了實現深複製的協議,nsobject的子類需要實現nscopying協議及其方法- (id)copywithzone:(nullable nszone *)zone,nsobject有乙個例項方法-(id)copy,預設copy會呼叫[self copywithzone:nil],對於採納了nscopying協議的子類,需要實現這個方法,否則會引發異常。

設計模式 原型設計模式

建立型的模式,最後一種原型設計模式。是一種使用起來簡單,可以配合單例模式或是工廠設計模式使用的。先看一下,原型設計模式是怎麼回事兒吧。如果想使用原型設計模式。必須滿足乙個條件,首先實現cloneable介面,然後重寫clone方法。這樣就算是完成了,然後就開始測試了 建立完物件以後給phone乙個當...

設計模式(二) 原型模式

原型模式是用於建立重複的物件,同時能保證效能,屬於建立型模式,提供了一種建立物件的最佳方式。意圖 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。主要解決 在執行期間建立和刪除原型。優點 提高效能,逃避了建構函式的約束。region 原型模式 public abstract clas...

python 設計模式 原型模式 原型設計模式

原型設計模式有助於隱藏該類建立例項的複雜性,在物件的概念將與從頭建立的新物件的概念不同。如果需要,新複製的物件可能會在屬性中進行一些更改。這種方法節省了開發產品的時間和資源。如何實現原型模式?現在讓我們看看如何實現原型模式。實現如下 import copy class prototype type ...