官方定義:使用原型例項指定建立物件的種類,並通過複製這個原型建立新的物件
通俗的講就是根據乙個原型建立乙個新的物件(建立的方式實質就是拷貝原型自己),而且不需要知道新物件建立的細節
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 ...