`

prototype 原型模型

 
阅读更多

原型模式

前序

这回小菜准备去应聘了 , 大鸟看了小菜的简历后感觉他都是在瞎扯 . 小菜准备了很多份相同的简历 . 于是大鸟便让小菜同学通过编写代码来实现相同的三份简历 .

不久后小菜实现了第一版的代码 .

小菜的第一版代码

#include <stdio.h>

class Resume

{

public:

Resume(char* _name) : name(_name),sex(0),age(0),timeArea(0),company(0){}

void SetPersonalInfo(char* _sex,char* _age)

{

sex = _sex;

age = _age;

}

void SetWorkExperience(char* _timeArea,char* _company)

{

timeArea = _timeArea;

company = _company;

}

void Display()

{

printf("%s %s %s\n",name,sex,age);

printf(" 工作经历 :%s %s",timeArea,company);

}

protected:

char* name;

char* sex;

char* age;

char* timeArea;

char* company;

};

int main()

{

Resume a(" 大鸟 ");

a.SetPersonalInfo(" ","29");

a.SetWorkExperience("1998-2000","XX 公司 ");

Resume b(" 大鸟 ");

b.SetPersonalInfo(" ","29");

b.SetWorkExperience("1998-2000","XX 公司 ");

Resume c(" 大鸟 ");

c.SetPersonalInfo(" ","29");

c.SetWorkExperience("1998-2000","XX 公司 ");

a.Display();

b.Display();

c.Display();

return 0;

}

大鸟看后说到 :” 三份简历需要三次初始化 , 这样客户端的代码很麻烦 , 如果要二十份那就要二十次初始化 .”

小菜答到 :” 是的 . 如果写错了一个字那就要改二十次 .”

于是大鸟便叫小菜用原型模式重写了一遍代码 .

原型模式

通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原型模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。

依赖关系的倒置

  抽象不应该依赖于实现细节,实现细节应该依赖于抽象。

(1)抽象A直接依赖于实现细节b(软件易脆,很容易需要重新编译)

 

(2)抽象A依赖于抽象B,实现细节b依赖于抽象B



动机(Motivation)

  在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接 口。如何应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出“这些易变对象”,从而使得“依赖这些易变对象的客户程序”不随着需求改变而改 变?

意图(Intent)

  使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象

                        ——《设计模式》GoF

 



在Spring中.深度科隆是应用广泛的。在实体模型上面有这样一个注解:@Component("lawsuitArchive") @scope("prototype"),表明在别的地方应用的时候,是引用其原型,同时Entity也要实现Cloneable接口和复写clone()方法。因为原型在初始化的时候就已经创建了一部分有价值的东西,减少容器的压力,而在别的地方,例如action中引用该对象的时候,直接可以使用@Resource(name="lawsuitArchive")引用对象,Spring会自动的装配好你想要的对象。

 

  • 大小: 8.4 KB
  • 大小: 11.8 KB
  • 大小: 27.8 KB
分享到:
评论

相关推荐

    C#视频-面向对象设计模式纵横谈(6):Prototype 原型模式(创建型模式)

    在本课程中,我们将深入探讨C#编程中的一个重要设计模式——Prototype原型模式,它是创建型设计模式的一种。原型模式主要用于简化实例化过程,通过复制已有对象来创建新对象,而不是直接通过构造函数来创建。这一...

    理解javascript中的原型和原型链

     大家都知道,JavaScript 不包含传统的类继承模型,而是使用 prototype 原型模型。代码实现大概是这样子的 function Student(name){ this.name = name; } var Kimy = new Student("Kimy"); Student.prototype.say...

    java原型模型

    Java原型模型(Prototype)是设计模式中的一种,主要用于对象的克隆操作,它允许我们创建对象的副本,而无需知道具体实现的细节。这个模式基于Java语言中的`Cloneable`接口和`clone()`方法,使得我们可以高效地复制...

    javascript闭包模型与原型模型(共31张PPT).pptx

    JavaScript中的闭包和原型模型是理解其面向对象编程机制的关键概念。闭包是一种特性,允许函数访问并操作其外部作用域中的变量,即使在外部函数已经执行完毕后,内部函数仍然能保持对外部变量的引用。这在JavaScript...

    DOM 模型和 Prototype

    Prototype框架也引入了原型链(Prototype Chain)的概念,这是JavaScript的一个核心特性。每个JavaScript对象都有一个内部链接到另一个对象的原型,这个原型对象提供了继承机制。在Prototype中,我们可以使用`Class....

    跟我学习javascript的prototype原型和原型链

    在JavaScript编程语言中,prototype原型和原型链是理解其面向对象特性的核心概念。JavaScript是一种基于原型的语言,它与传统的面向对象语言(如Java或C#)不同,后者是基于类的继承模型。而JavaScript使用原型链来...

    prototype

    标题中的"prototype"一词在IT领域中通常指的是JavaScript编程语言中的原型(Prototype)概念。JavaScript是一种基于对象和原型的动态类型语言,它的对象继承机制是通过原型链(Prototype Chain)来实现的。在...

    软件过程模型(瀑布,原型,增量,螺旋)的原理及优缺点.pdf

    3. 快速原型模型(Rapid Prototype Model) 快速原型模型是一种迭代开发的方法,旨在快速建立一个原型,以满足客户的需求。该模型的优点是克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险。快速原型方法...

    Prototype Composer 2.4

    "Prototype Composer 2.4" 是一款专注于原型设计的专业工具,它为设计师提供了一种高效且直观的方式来创建和编辑交互式原型。这款软件的核心功能在于帮助用户快速构建应用程序或网站的交互模型,以便在开发阶段前...

    强大的原型和原型链

    JavaScript 的继承机制与传统面向对象语言(如 Java、C#)中的类继承不同,它采用了基于原型(Prototype-based)的继承模型。这种模型使得 JavaScript 在处理对象之间的继承关系时更加灵活且强大。尽管初学者可能对...

    原型开发PPT介绍-原型开发就是这么简单

    低保真原型(Low-fidelity prototype)关注功能布局,而高保真原型(High-fidelity prototype)更接近真实产品,包含更多的视觉细节和交互效果。 2. **原型工具**:列举并解析各种常用的原型设计工具,如Axure、...

    Serena-Prototype-Composer2009R1

    在**标签**中提到的“界面原型开发工具”这一关键词,强调了Serena Prototype Composer的核心优势——专注于创建高质量、具有交互性的界面模型。这样的工具不仅提高了开发效率,而且降低了因为后期修改导致的成本和...

    JavaScript的prototype

    JavaScript中的`prototype`是一个核心概念,它涉及到对象继承和函数原型。在JavaScript中,每创建一个函数,该函数就会自动获得一个名为`prototype`的属性,这个属性是一个对象,用于实现对象间的继承。同时,每个...

    电商系统管理后台设计原型RP文件完整版.rp_电商原型_原型_

    RP文件,通常指的是Rapid Prototype(快速原型)文件,是一种用于设计和展示交互原型的工具,如Axure RP,它可以帮助设计者快速创建线框图、交互模型和原型。 1. **商品分类管理**:这部分涉及创建和维护商品的分类...

    prototype.js javaScript插件

    "Prototype.js"是一个针对JavaScript的开源库,旨在增强和扩展JavaScript的基本功能,尤其在处理DOM(文档对象模型)操作、事件处理以及Ajax交互时提供了极大的便利。 ### 1. Prototype.js核心概念 - **原型链**:...

    Episode-Based Prototype Generating Network for Zero-Shot Learnin

    论文的核心是设计了一个生成模型,该模型能够根据类语义原型合成视觉原型。这一方法旨在通过调整视觉与语义之间的交互来对齐这两个空间。具体来说,模型将视觉原型的生成和类语义推理结合到一个对抗性框架中,并配以...

    prototype1.7.2

    Prototype 的核心特性包括增强的 JavaScript 对象模型、强大的 DOM 操作接口和高效的 Ajax 处理。在 1.7.2 版本中,这些特性得到了进一步优化,以提高性能和兼容性。 2. **对象扩展与类模拟** Prototype 引入了类...

    不是原型继承那么简单!!prototype的深度探索

    **设计模式中的 `prototype` 模式**:在设计模式中,`prototype` 模式是指使用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。虽然这不是本文的重点,但值得指出的是,JavaScript 的 `prototype` ...

Global site tag (gtag.js) - Google Analytics