1:工厂(Factory Method)
首先,工厂这个名字取得很好,就像前面说的,创建型模式的意义在于把生成一个变量从手工作坊(new,delete)的方式变化到工业化的模式,那么这里的工业化模式最典型的就是工厂(Factory Method)。工厂自己也是一个类,也会生成实例,工厂的功能就是为了创建另外一些变量。举例子,我们有奔驰车,宝马车,马拉车等等。现在我们要为他们生成变量,手工作坊和工业化的区别如下:
1) 手工作坊
MyCar = new 奔驰。
显然,如果有一天,你需要了一个新的车,叫宝马, 就需要把程序里面所有的MyCar = new 奔驰换成 MyCar = new 宝马。这样实在太麻烦了。
2) Factory方式
首先我们需要一个factory的实例 Factory = new 轿车工厂
那么我们需要奔驰车的时候就是用 MyCar = Factory.CreateCar() //这里的Factory 是奔驰车的工厂
我们需要宝马的时候就用 MyCar = Factory.CreateCar() //这里的Factory 是宝马的工厂
看,不许要修改那么多了吧?这个就是Factory模式的好处。
3) 缺点。
可惜,Factory模式并不能一点都不修改,他需要修改一部分,就是Factory自己的创建
当从Factory = new 轿车工厂 创建一个工厂的时候,必须要指定是哪个工厂。比如下面的例子
class 轿车工厂
{
}
class 宝马轿车工厂:public 轿车工厂
{
}
class 奔驰轿车工厂:public 轿车工厂
{
}
那么,当你想从宝马车换到本车车的时候,就必须有下面的变迁:
Factory = new 宝马轿车工厂 ==> Factory = new 奔驰轿车工厂
2: 原型 (Prototype)
工厂模式还是有局限性的,比如轿车,我们需要的轿车可能会越来越多:奔驰,宝马,法拉利,A,B,C,D。。。。。可能有好几百种。采用工厂模式,我们必须给每一种车辆设计一个他的工厂,这个会生成好几百个类!!!!!!!
然而,我们其实并不需要声明这么多的类,因为好多工厂都是类似的。比如上面的几百个例子中,有几个这样的例子:宝马1型,宝马2型,宝马3型,宝马4型,宝马5型,宝马6型。虽然他们的差别很小,但是Factory模式必须为他们每一个生成一个类!显然,我们可以用下面的方式来生成几个类:宝马原形, 然后 宝马1型= 宝马原形(发动机1),宝马1型= 宝马原形(发动机2)。。。
这就是原型模式!
原型模式的存在价值就是减少 Factory模式的类的种类。
原型模式有以下几点注意事项:
1) 原型能大大减少类的数目,但是并不会把上面轿车几百种变成一种,所以我们需要一个原型管理器。用associative store的方式保存,可以注册,删除,引用一个原型。这种管理器也可以是一个扩展的singleton对象,这点就有点类似Abstract Factory了,但是功能不一样。
2) 克隆操作。也就是c++里面的拷贝构造函数。同一个一个原型实现一个新的实例,必须要注意把原型拷贝到新的实例里面的操作。
分享到:
相关推荐
设计模式:简单工厂、方法工厂、抽象工厂、单例、原型、委派、模板、代理、策略
在本书中,Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides介绍了设计模式的原理,并且对这些设计模式进行了分类描述。因此,该书做出了两个重要的贡献:首先,它展示了模式在建造复杂系统过程中所处的...
交互原型设计:低保真原型设计规范.pptx
Java设计模式共有23种,分别为:抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式、桥接模式、组合模式、装饰模式、享元模式、代理模式、命令模式、解释器模式、访问者模式、迭代子...
AXURE原型设计:移动端搜索原型案例.docx
《Java设计模式》面向有一定Java语言基础和一定编程经验的读者,重点探讨在Java程序设计中怎样使用著名的23个设计模式。《Java设计模式》的目的是让读者不仅学习怎样在软件设计中使用好设计模式,更重要的是让读者...
1.创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:模板方法模式、命令模式、...
java 23种设计模式之原型模式:用原型实例指定创建对象的种类,并通过复制、克隆这些原型创建新的对象。
创建型设计模式:简单工厂模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式,单例模式; 结构型设计模式:适配器模式,桥接模式,组合模式,装饰模式,外观模式,轻量级模式,代理模式; 行为性设计模式:...
设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述Spring源码中运用到的一些设计模式 ...
Axure原型设计:以旧换新原型设计方案演示:http://cloud.axureshop.com/lc23cv
java设计模式的精简版,创建型模式:工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式共五种; 结构型模式:适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式共七种。 行为型...
写在前面 分享一些设计模式的笔记。陆续整理,按照设计模式类型,创建型,结构型,行为型发布 博文会用通俗的话梳理一些自己的理解,结合开发中的实际场景, 理解不足小伙伴帮忙指正,虚心接受 ^_^ 傍晚时分
实验六:原型模式.rar实验六:原型模式.rar关于java设计模式
设计模式之Prototype(原型) 设计模式之Builder 设计模式之Singleton(单态) 结构模式: 设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator...
设计模式之禅之 原型模式 设计模式之禅之 原型模式 设计模式之禅之 原型模式设计模式之禅之 原型模式
创建型模式:共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式:共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式:共十一种:...
Axure原型设计:移动端图片管理原型.docx
该代码是android应用设计模式之原型模式小例子