国产真实乱子伦精品,国产精品100页,美女网站色免费,国产白嫩美女免费观看,欧美精品亚洲,欧美韩国xxx,欧美性猛交xxxxxxxx软件

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

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

   

定義

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

原型模式(Prototype)

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

    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).

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

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

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

代碼示例

    抽象原型是一個鼠標(biāo)頁面,定義如下:

#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;           // 鼠標(biāo)顏色- (id) clone;@end
具體實(shí)現(xiàn)原型是一個藍(lán)色鼠標(biāo),頭文件要求遵從協(xié)議MyMouse和NSCoping,其代碼如下:
#import<UIKit/UIKit.h>#import "MyMouse.h"http:// 實(shí)現(xiàn)協(xié)議MyMouse及深拷貝@interface BlueMouse : UIView<NSCopying, MyMouse>@end
對應(yīng)的實(shí)現(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 -- 實(shí)現(xiàn)協(xié)議NSCopying- (id)copyWithZone:(NSZone *)zone{    return [[[self class] allocWithZone:zone] init];}#pragma mark -- 實(shí)現(xiàn)抽象原型 MyMouse- (id)clone{    BlueMouse* mouse = [self copy];        mouse.color = [UIColor blueColor];        return mouse;}@end
實(shí)現(xiàn)代碼主要是實(shí)現(xiàn)對象的深拷貝,以及原型接口clone,給鼠標(biāo)賦予對應(yīng)的顏色,

電腦資料

原型模式(Prototype)》(http://www.shangyepx.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);
先構(gòu)建一個對象,該對象的顏色是黑色的,但是通過原型接口clone出得對象是藍(lán)色的,輸出結(jié)果如下:

   

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

總結(jié)

    這個原型設(shè)計(jì)模式好像其實(shí)就是一個深復(fù)制+自定義,其他未詳,以后以后想明白了再來補(bǔ)充。

最新文章