



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
比较几种创建型模式的优缺点,仔细考察这几种模式的区别和相关性。第一类是工厂模式,工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类。工厂模式有三种形态:简单工厂模式;工厂方法模式;抽象工厂模式是。前两者是类的创建模式,后者是对象的创建模式。简单工厂:简单工厂模式是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例,涉及工厂角色(Creator)、抽象产品(Product)角色及具体产品(Concrete Product)角色等三个角色。优点:模式的核心是工厂类,该类中含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅负责“消费”产品。简单工厂模式实现了对责任的分割。缺点:当产品类有复杂的多层次等级结构时,工厂类只有它自己。模式中工厂类集中了所有的产品创建逻辑,形成一个无所不知的全能类。将多个创建逻辑放在一个类中,当产品类有不同接口种类时,工厂类需要判断在什么时候创建某种产品,使得系统在将来进行功能扩展时较为困难。该模式采用静态方法作为工厂方法,而静态方法无法由子类继承,因此工厂角色无法形成基于继承的等级结构。简单工厂模式只在有限的程度上符合“开-闭”原则。工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。工厂方法模式是简单工厂模式的进一步抽象和推广,其基本思想是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。优点:多态性:客户代码可以做到与特定应用无关,适用于任何实体类子类可以重写新的实现,也可以继承父类的实现。加一层间接性,增加了灵活性。良好的封装性,代码结构清晰。扩展性好,在增加产品类的情况下,只需要适当修改具体的工厂类或扩展一个工厂类,就可“拥抱变化”屏蔽产品类。产品类的实现如何变化,调用者都不需要关心,只需关心产品的接口,只要接口保持不变,系统中的上层模块就不会发生变化。典型的解耦框架。高层模块只需要知道产品的抽象类,其他的实现类都不需要关心,符合迪米特法则,符合依赖倒置原则,符合里氏替换原则。缺点:需要Creator和相应的子类作为工厂方法的载体,如果应用模型确实需要creator和子类存在,则很好;否则的话,需要增加一个类层次。抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类,客户端不必指定产品的具体类型,创建多个产品族中的产品对象。优点:分离了具体的类,一个工厂封装创建产品对象的责任和过程,它将客户与类的实现分离易于交换产品系列,只需改变具体的工厂就可以使用不同的产品配置。有利于产品的一致性,当一个系列中的产品对象被设计成一起工作时,一个应用一次只能使用同一个系列中的对象。缺点:难以支持新的产品等级结构,支持新的产品等级结构就要扩展抽象工厂接口。单例模式:一个类仅有一个实例,自行实例化并向整个系统提供一个访问它的全局访问点。确保一个类只能被实例化一次。优点:跨平台:使用合适的中间件,可以把singleton模式扩展为跨多个JVM和多个计算机工作。适用于任何类:只需把一个类的构造函数变成私有的,并且在其中增加相应的静态函数和变量,就可以把这个类变为singleton。可以通过派生创建:给定一个类,可以创建它的一个singleton子类。延迟求值:如果singleton从未使用过,那么就绝不会创建它。缺点:摧毁方法未定义: 没有好的方法去摧毁一个singleton,或者解除其责任。不能继承:从singleton派生的类并不是singleton。如果要使其成为singleton,必须要增加所需的静态函数和变量。效率问题:每次调用instance方法都会执行if语句,多余。不透明性: singleton的使用者知道它们正在使用一个singleton ,因为它们必须要调用instance方法。建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造模式利用一个导演者对象和具体建造者对象一个一个地建造出所有的零件,从而建造出完整的对象。优点:建造模式的使用使得产品的内部表象可以独立地变化。使用建造模式可以使客户端不必知道产品内部组成的细节。每一个Builder都相对独立,而与其他的Builder无关。模式所建造的最终产品更易于控制。缺点:建造者模式的“加工工艺”是暴露的,这样使得建造者模式更加灵活,也使得工艺变得对客户不透明。原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。以一个已有的对象作为原型,通过它来创建新的对象。在增加新的对象的时候,新对象的细节创建工作由自己来负责,从而使新对象的创建过程与框架隔离开来。优点:原型模式允许动态地增加或减少产品类。由于创建产品类实例的方法是产品类内部具有的,因此增加新产品对整个结构没有影响。原型模式提供简化的创建结构。工厂方法常需要有一个与产品类相同的等级结构,而原型模式不需要。具有给一个应用软件加载新功能的能力。产品类不需要非得有任何事先确定的等级结构,因为原型模式适用于任何的等级结构。缺点:每一个类必须配备一个克隆方法。配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。关系总结:1 工厂方法模式是简单工厂模式的扩展,由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。如果只有一个具体工厂类,工厂方法模式可以改造为简单工厂模式。2 抽象工厂经常用工厂方法来实现。3 Prototype:不需要创建Creator的子类,但它们通常需要一个针对Product类的Initialize操作。4 抽象工厂模式是对象的创建模式,是工厂方法模式的进一步推广。抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。5 工厂方法模式针对的是一个产品等级结构;抽象工厂模式需要面对多个产品等级结构。6 Singleton与其他创建型模式并不矛盾,可以用Singleton来实现其他模式中的对象。包括Abstract Factory、Builder、Prototype等。7 Builder和Abstract Factory都可以创建复杂的对象。但是Builder模式着重于一步步构造一个复杂的对象,强调的是产品的内部组成,Abstract factory着重于多个系列的产品对象。Builder在最后一步返回产品,而Abstract factory立即返回产品。Abstractor Factory处于更为具体的角度, Builder处于更宏观的角度。一个系统可以由一个建造模式和一个抽
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 精细化快递末端网点承包管理与效益提升协议
- 体育赛事策划执行与赞助商合作协议
- 体育赛事替身保险补充协议针对运动员保障
- 介入治疗防护规范与实施
- 高效生物医药专利整合与商业化运营合作协议
- 仲裁裁决书翻译与执行合同
- 美容美发行业连锁经营与品牌拓展合同
- 股权补偿款担保及股权激励计划解除实施协议
- 物联网设备数据访问安全保证协议
- 红木家具修复与品牌形象设计合同
- 煤质化验工职业技能竞赛理论考试题及答案
- DB52T 1512-2020 水利水电工程隧洞施工超前地质预报技术规程
- 15J403-1-楼梯栏杆栏板(一)
- 部编版四年级语文下册1-8单元词语、课文默写练习卷
- 《数学课程标准》义务教育2022年修订版(原版)
- GB/T 1148-2024内燃机铝活塞
- 宣传用品供货制供应商采购投标方案(技术方案)
- 部编版小学语文二年级下册教案(全册)
- 2024年贵州省贵阳市中考生物地理试题卷
- 第七章有机化合物章末复习课件 2023-2024学年高一下学期化学人教版(2019)必修第二册
- 五官科护理第七章-口腔颌面部的应用解剖生理课件
评论
0/150
提交评论