设计模式-原型模式

设计模式-原型模式

效果:

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

以下以复制一个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

需要注意的地方:

时间: 2024-09-18 03:47:42

设计模式-原型模式的相关文章

4、Python与设计模式--原型模式

一.图层 大家如果用过类似于Photoshop的平面设计软件,一定都知道图层的概念.图层概念的提出,使得设计.图形修改等操作更加便利.设计师既可以修改和绘制当前图像对象,又可以保留其它图像对象,逻辑清晰,且可以及时得到反馈.本节内容,将以图层为主角,介绍原型模式. 首先,设计一个图层对象. class simpleLayer: background=[0,0,0,0] content="blank" def getContent(self): return self.content d

PHP设计模式——原型模式

     声明:本系列博客参考资料<大话设计模式>,作者程杰.        用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建.它主要面对的问题是:"某些结构复杂的对象"的创建工作:由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口.  

.NET设计模式-原型模式(Prototype Pattern)

原型模式(Prototype Pattern) --.NET设计模式系列之六 Terrylee,2006年1月 概述 在软件系统中,有时候面临的产品类是动态变化的,而且这个产品类具有一定的等级结构.这时如果用工厂模式,则与产品类等级结构平行的工厂方法类也要随着这种变化而变化,显然不大合适.那么如何封装这种动态的变化?从而使依赖于这些易变对象的客户程序不随着产品类变化? 意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 结构图 Prototype模式结构图 生活中的例子 Pr

Java设计模式--原型模式

原型模式 用原型实例制定创建对象的种类,并且通过复制这些原型创建新的对象. Prototype Pattern Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype. 类图 模式的结构与使用 原型方法模式的结构中包括两种角色. + 抽象原型(Abstract Prototype):是一个接口,负责定义对象复制自身的

设计模式之禅之设计模式-原型模式

一:原型模式的定义        --->用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象        --->原型模式(Prototype Pattern)的简单程度仅次于单例模式和迭代器模式.正是由于简单,使用的场景才非常地多        --->原型模式的核心是一个clone方法,通过该方法进行对象的拷贝,Java提供了一个Cloneable接口来标示这个对象是可拷贝的,为什么说是"标示"呢?翻开JDK的帮助看看Cloneable是一个方法都没

实例讲解C++编程中对设计模式中的原型模式的使用_C 语言

原型模式的实现完整代码示例(code):原型模式的实现很简单,这里为了方便初学者的学习和参考,将给出完整的实现代码(所有代码采用 C++实现,并在 VC 6.0 下测试运行). 代码片断 1:Prototype.h //Prototype.h #ifndef _PROTOTYPE_H_ #define _PROTOTYPE_H_ class Prototype{ public: virtual ~Prototype(); virtual Prototype* Clone() const = 0;

解析设计模式中的Prototype原型模式及在C++中的使用_C 语言

原型模式的意图是用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 适用性 当要实例化的类是在运行时刻指定时,例如,通过动态装载:或者 为了避免创建一个与产品类层次平行的工厂类层次时:或者 当一个类的实例只能有几个不同状态组合中的一种时.建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些. 关于这个模式,突然想到了小时候看的<西游记>,齐天大圣孙悟空再发飙的时候可以通过自己头上的 3 根毛立马复制出来成千上万的孙悟空,对付小妖怪很管用(数量最重要). 原型

详解Java的设计模式编程中的原型模式_java

定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象.类型:创建类模式类图: 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype.Prototype类需要具备以下两个条件: 实现Cloneable接口.在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法.在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException

【秒懂设计模式】原型模式

 秒懂设计模式--原型模式 (五)原型模式 [官方定义]用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象,属于对象创建模式. [举例]在找工作的时候,通常需要我们的毕业证和学位证,但是我们一般不会把原件(原型实例)给到用人单位,而是会把原件复印(拷贝)几份,然后供用人单位使用. [Java代码] ①创建一个证书抽象类. package com.liyan.prototype; /** * 证书抽象类 * <p>Title: Certificate</p> * @au