设计模式-原型模式

简介:

设计模式-原型模式

效果:

原型模式,其实就是完整的复制一个对象,以一个对象为样本,进行复制作业,然后再来使用.

以下以复制一个UIView的操作来讲解原型模式的实现

注:UIView对象是不能够复制的,我们需要完整的把UIView对象的参数都复制了后,就行了.

http://stackoverflow.com/questions/4425939/can-uiview-be-copied

Your app probably crashes with something like:

 [UIView copyWithZone:]: unrecognized selector sent to instance 0x1c6280

The reason is that UIView does not implement the copying protocol, and therefore there is no copyWithZone selector in UIView.

因为UIView没有实现复制的协议,所以也就不能复制UIView了.

UIView+Prototype.h 与 UIView+Prototype.m

//
//  UIView+Prototype.m
//  Copy
//
//  Created by YouXianMing on 14/11/14.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import "UIView+Prototype.h"

@implementation UIView (Prototype)

- (UIView *)createPrototype {
    UIView *prototypeView = nil;
    
    if (self) {
        // 创建出view
        prototypeView                            = [[UIView alloc] initWithFrame:self.frame];
        
        // 被复制的内容
        prototypeView.transform                  = self.transform;
        prototypeView.contentScaleFactor         = self.contentScaleFactor;
        prototypeView.multipleTouchEnabled       = self.multipleTouchEnabled;
        prototypeView.exclusiveTouch             = self.exclusiveTouch;
        prototypeView.autoresizesSubviews        = self.autoresizesSubviews;
        prototypeView.autoresizingMask           = self.autoresizingMask;
        prototypeView.clipsToBounds              = self.clipsToBounds;
        prototypeView.backgroundColor            = self.backgroundColor;
        prototypeView.alpha                      = self.alpha;
        prototypeView.clearsContextBeforeDrawing = self.clearsContextBeforeDrawing;
        prototypeView.hidden                     = self.hidden;
        prototypeView.contentMode                = self.contentMode;
        prototypeView.tintColor                  = self.tintColor;
        prototypeView.tintAdjustmentMode         = self.tintAdjustmentMode;
    }
    
    return prototypeView;
}

@end


//
//  UIView+Prototype.h
//  Copy
//
//  Created by YouXianMing on 14/11/14.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UIView (Prototype)

/**
 *  创建当前View的原型
 *
 *  @return 当前view的一个新的实例
 */
- (UIView *)createPrototype;

@end

使用:
//
//  ViewController.m
//  Copy
//
//  Created by YouXianMing on 14/11/14.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import "ViewController.h"
#import "UIView+Prototype.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
 
    // 作为原型的view
    UIView *redView         = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 100, 100)];
    redView.backgroundColor = [UIColor redColor];
    redView.alpha           = 0.5;
    [self.view addSubview:redView];
    
    // 根据一个原型创建出view
    UIView *greenView         = [redView createPrototype];
    greenView.frame           = CGRectMake(75, 75, 100, 100);
    greenView.backgroundColor = [UIColor greenColor];
    [self.view addSubview:greenView];
    
    // 根据一个原型创建出view
    UIView *blueView         = [greenView createPrototype];
    blueView.frame           = CGRectMake(100, 100, 100, 100);
    blueView.backgroundColor = [UIColor blueColor];
    [self.view addSubview:blueView];
}

@end

需要注意的地方:

目录
相关文章
|
7月前
|
设计模式 安全 Java
面向对象编程的精髓:Java设计模式 - 原型模式(Prototype)完全参考手册
【4月更文挑战第7天】原型模式是OOP中的创建型设计模式,用于通过复制现有实例创建新实例,尤其适用于创建成本高或依赖其他对象的情况。它包括Prototype接口、ConcretePrototype实现和Client客户端角色。优点是性能优化、避免子类化和动态增加产品族。实现包括定义原型接口、实现具体原型和客户端调用克隆方法。最佳实践涉及确保克隆正确性、选择深拷贝或浅拷贝及考虑线程安全。但需注意克隆方法管理、性能开销和循环引用等问题。在Java中,实现Cloneable接口和覆盖clone方法可实现原型模式。
77 4
|
7月前
|
设计模式 Java 关系型数据库
23种设计模式 —— 原型模式【克隆羊、浅拷贝、深拷贝】
23种设计模式 —— 原型模式【克隆羊、浅拷贝、深拷贝】
|
7月前
|
设计模式 安全 Java
【设计模式】原型模式
【设计模式】原型模式
|
3月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑】设计模式——原型模式
对比原型模式和传统方式的实现思路、代码方案、优缺点,阐述原型模式的使用场景,以及深拷贝、浅拷贝等相关概念,并扩展原型模式在Spring源码中的应用。
【Java笔记+踩坑】设计模式——原型模式
|
3月前
|
设计模式 Java
Java设计模式-原型模式(3)
Java设计模式-原型模式(3)
Java设计模式-原型模式(3)
|
5月前
|
设计模式
iLogtail设计模式问题之iLogtail中的原型模式是什么
iLogtail设计模式问题之iLogtail中的原型模式是什么
iLogtail设计模式问题之iLogtail中的原型模式是什么
|
5月前
|
设计模式 JavaScript
js设计模式【详解】—— 原型模式
js设计模式【详解】—— 原型模式
52 6
|
6月前
|
设计模式 Java
Java设计模式之原型模式详解
Java设计模式之原型模式详解
|
6月前
|
设计模式
原型模式-大话设计模式
原型模式-大话设计模式
|
6月前
|
设计模式 Java Spring
设计模式——原型模式
设计模式——原型模式