设计模式【1】:原型模式【创建对象】
2017-08-16 10:57
344 查看
面试期间,总是有面试官问到关于设计模式的问题,尽管我们在敲代码的时候不经意间会用到设计模式,可是在面试管面前我们还是说不出。在这我把看到的一些设计模式记录下来,加深自己的印象,也为了更好的运用这些设计模式。
【原型模式】
原型模式的官方定义:“使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象”。
简单来理解就是依据这个原型创建新的对象,这样的创建是指深复制,得到一份新的内存资源。而不是一个新的指针引用。
官方定义总是这么坑爹,让人那么琢磨不透。事实上理解了,你会说,就这也算是一个设计模式。那么咱们就白话说这样的设计模式:原型模式就是针对深复制来说的,定义能够这么去理解。
这就是所谓的原型模式。尽管看到后总感觉不是必需弄成一个设计模式。可是还要感谢这个设计模式的提出者。
【关于深复制说两句】
像NSString、NSDictionary这些类。本身已经实现了copyWithZone:(NSZone
*)zone方法。直接使用如[NSString copy]调用就可以。在复制后得到的副本,又能够分为可变副本(mutable copy)和不可变副本(immutable copy)。通常在NSCopying协议规定的方法copyWithZone中返回不可变副本,在NSMutableCopying的mutableCopyWithZone方法中返回可变副本。然后调用copy和mutableCopy方法来得到副本。
【原型模式】
原型模式的官方定义:“使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象”。
简单来理解就是依据这个原型创建新的对象,这样的创建是指深复制,得到一份新的内存资源。而不是一个新的指针引用。
官方定义总是这么坑爹,让人那么琢磨不透。事实上理解了,你会说,就这也算是一个设计模式。那么咱们就白话说这样的设计模式:原型模式就是针对深复制来说的,定义能够这么去理解。
一个对象 Dog * dog = new Dog; 那么你想得到一个dog1 . 能够这样来:Dog *dig1 = [dog copy]; 那么如今dog和dog1是两个独立的个体
这就是所谓的原型模式。尽管看到后总感觉不是必需弄成一个设计模式。可是还要感谢这个设计模式的提出者。
【关于深复制说两句】
像NSString、NSDictionary这些类。本身已经实现了copyWithZone:(NSZone
*)zone方法。直接使用如[NSString copy]调用就可以。在复制后得到的副本,又能够分为可变副本(mutable copy)和不可变副本(immutable copy)。通常在NSCopying协议规定的方法copyWithZone中返回不可变副本,在NSMutableCopying的mutableCopyWithZone方法中返回可变副本。然后调用copy和mutableCopy方法来得到副本。
相关文章推荐
- 设计模式【1】:原型模式【创建对象】
- 一步步学习javascript基础篇(4):面向对象设计之创建对象(工厂、原型和构造函数等模式)
- Objective-C设计模式——原型Prototype(对象创建)
- 设计模式——创建型模式之借助原型模式(Prototype Pattern)创建保护性拷贝对象(四)
- 设计模式:对象创建(原型,单例,简单工厂,工厂方法,抽象工厂,生成器)
- 设计模式之Prototype(原型模式)对象创建型
- 设计模式 3.4 Prototype(原型)-对象创建模式
- 设计模式深入浅出(二)对象创建——Builder,原型,单例
- 《JS高级程序设计》第6章读书笔记:创建对象(二)原型模式和组合模式
- JavaScript构造函数及原型对象 使用Object或对象字面量创建对象 工厂模式创建对象 构造函数模式创建对象 原型模式创建对象 构造与原型混合模式创建对象
- 设计技巧20:建造模式:Builder 分不同的步骤创建复杂的对象,支持可变参数
- 设计模式之三:对象创建系列模式
- 【java设计模式】单例设计模式案例:工厂加工零件(对象是工厂,所以就需要创建一个工厂的类)
- JavaScript创建对象(三)——原型模式
- 创建对象-组合使用构造函数和原型模式
- JavaScript 创建对象--组合使用构造函数模式和原型模式
- Javascript 中创建自定义对象的方法(设计模式)
- Objective-C设计模式——工厂方法模式virtual constructor(对象创建)
- JavaScript构造函数及原型对象 使用Object或对象字面量创建对象 工厂模式创建对象 构造函数模式创建对象 原型模式创建对象 构造与原型混合模式创建对象
- 单例设计模式-单例对象创建