午夜精品福利视频,亚洲激情专区,免费看a网站,aa毛片,亚洲色图激情小说,亚洲一级毛片,免费一级毛片一级毛片aa

原型模式(Prototype) -電腦資料

電腦資料 時間:2019-01-01 我要投稿
【www.stanzs.com - 電腦資料】

   

定義

    原型模式有點像復制,不過該復制可以做一些修改,即從原對象復制出一個一模一樣的對象后,然后可以選擇性地修改復制后的對象,以此創(chuàng)建出一個需要的新對象,

原型模式(Prototype)

。這里需要注意的是此處的復制指深拷貝,比較權威的定義如下所示:

    THE PROTOTYPE PATTERN: Specify the kinds of objects to create using a prototypical instance,

    and create new objects by copying this prototype.*

    * The original definition appeared in Design Patterns, by the “Gang of Four” (Addison-Wesley,

    1994).

    翻譯:使用原型實例指定創(chuàng)建對象的種類,并通過復制這個原型創(chuàng)建新的對象

原型模式的類圖解鉤大致如下所述:

    其中Prototype是一個客戶端所知悉的抽象原型類,在程序運行期間,所有由該抽象原型類具體化的原型類的對象都可以根據(jù)客戶端的需要創(chuàng)建出一個復制體,這些具體化的原型類都需要實現(xiàn)抽象原型類的clone方法。在IOS里面,抽象原型類一般指協(xié)議(delegate),該協(xié)議聲明了一個必須實現(xiàn)的clone接口,而那些具體化的原型類則是實現(xiàn)了該協(xié)議的類。使用該種方法創(chuàng)建對象的主要應用場所是:創(chuàng)建的對象比較復雜。(通過原型復制,使得封裝簡單化)需要根據(jù)現(xiàn)有的原型自定義化自己的對象。(比如原型是一件白色衣服,自定義的則是黑色等其他衣服,通過復制修改后即可實現(xiàn))

代碼示例

    抽象原型是一個鼠標頁面,定義如下:

#import<UIKit/UIKit.h>@protocol MyMouse<NSObject>@property (nonatomic, strong) UIButton* leftButton;     // 左鍵@property (nonatomic, strong) UIButton* RightButton;    // 右鍵@property (nonatomic, strong) UILabel* panelSection;    // 面板區(qū)@property (nonatomic, strong) UIColor* color;           // 鼠標顏色- (id) clone;@end
具體實現(xiàn)原型是一個藍色鼠標,頭文件要求遵從協(xié)議MyMouse和NSCoping,其代碼如下:
#import<UIKit/UIKit.h>#import "MyMouse.h"http:// 實現(xiàn)協(xié)議MyMouse及深拷貝@interface BlueMouse : UIView<NSCopying, MyMouse>@end
對應的實現(xiàn)為:

#import "BlueMouse.h"@implementation BlueMouse@synthesize leftButton;@synthesize RightButton;@synthesize panelSection;@synthesize color;- (id)init{    if(self = [super init])    {        self.leftButton = [[UIButton alloc] init];        self.RightButton = [[UIButton alloc] init];        self.panelSection = [[UILabel alloc] init];        self.color = [UIColor blackColor];    }    return self;}#pragma mark -- 實現(xiàn)協(xié)議NSCopying- (id)copyWithZone:(NSZone *)zone{    return [[[self class] allocWithZone:zone] init];}#pragma mark -- 實現(xiàn)抽象原型 MyMouse- (id)clone{    BlueMouse* mouse = [self copy];        mouse.color = [UIColor blueColor];        return mouse;}@end
實現(xiàn)代碼主要是實現(xiàn)對象的深拷貝,以及原型接口clone,給鼠標賦予對應的顏色,

電腦資料

原型模式(Prototype)》(http://www.stanzs.com)。

    為了使用該原型創(chuàng)建出子子孫孫,其測試代碼可以是:

BlueMouse* mouse = [[BlueMouse alloc] init];NSLog(@"mouse  ->object:%@ color:%@", mouse, mouse.color);BlueMouse* mouse1 = [mouse clone];NSLog(@"mouse1 ->object:%@ color:%@", mouse1, mouse1.color);BlueMouse* mouse2 = [mouse clone];NSLog(@"mouse2 ->object:%@ color:%@", mouse2, mouse2.color);
先構建一個對象,該對象的顏色是黑色的,但是通過原型接口clone出得對象是藍色的,輸出結果如下:

   

    可以發(fā)現(xiàn)三個對象的地址都不一樣的,表示都是不同的對象,顏色值mouse和mouse1不同,但是mouse1和mouse2相同的。

總結

    這個原型設計模式好像其實就是一個深復制+自定義,其他未詳,以后以后想明白了再來補充。

最新文章