六种创建型设计模式的比较和总结

来源:互联网 发布:马蓉出轨的代价 知乎 编辑:程序博客网 时间:2024/05/20 20:28

一、描述

创建型设计模式包括如下几个:简单工厂模式(Simple Factory)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、创建者模式(Builder)、原型模式(Prototype)、单例模式(Singleton)。


二、六种创建型设计模式的比较

简单工厂模式:简单工厂模式又叫静态工厂模式,它定义一个具体的工厂类来负责所有产品对象的创建,因此这个工厂类的职责过大,当客户端UI与某些产品的创建有不同的要求时,需要不断地修改工厂类,增加判断逻辑,不利于后期维;而且由于简单工厂模式使用静态方法来创建对象,这就导致静态方法不能被继承。

例如:我要创建奥利汽车的轮胎、发动机、底盘、车身,也要创建BYD汽车的轮胎、发动机、底盘、车身,那么在简单工厂模式下,我有一个工厂类要实现创建这六个部件的方法,也就是所有部件产品的创建都放在一个工厂类中。

简单工厂模式案例详情请见:http://blog.csdn.net/tongyuehong137/article/details/45399321


工厂方法模式:在简单工厂模式的基础上,不再是用一个工厂类创建所有产品的对象,而是一个具体的工厂类负责创建一个单独的产品,有几个不同的产品就需要几个不同的工厂类,即使这两个产品有某些联系,也需要分成不同的工厂类。在这个模式中,抽象工厂类负责定义创建对象的接口,而实现抽象工厂的具体工厂类负责具体对象的创建,随着产品数量的不断增加,具体工厂类的数量将会越来越多。

例如:我要创建奥利汽车的轮胎、发动机、底盘、车身,也要创建BYD汽车的轮胎、发动机、底盘、车身,那么在工厂方法模式下,我有一个四个抽象工厂类轮胎、发动机、底盘、车身;有八个具体工厂类:奥迪轮胎工厂类、奥迪发动机工厂类、奥迪底盘工厂类、奥迪车身工厂类,BYD轮胎工厂类、BYD发动机工厂类、BYD底盘工厂类、BYD车身工厂类,随着不同品牌的汽车车牌的增加,我的具体工厂类也会越来越多。

工厂方法模式案例详情请见:http://blog.csdn.net/tongyuehong137/article/details/45399831


抽象工厂模式:在工厂方法模式的基础上,我们抛弃了一个产品对应一个具体工厂类的想法,而是由一个具体的工厂类负责创建一系列有相互关联的产品,当一系列相互关联的产品被设计到一个工厂类之后,客户端的调用就变得非常简单;如果要更换这个谢列的产品,则只需要更换一个工厂类即可。但是这个模式把相互关联的产品的组装放在了客户端,这会使客户端变得非常臃肿;如果把零件组装放在工厂类里面,由违反了工厂类“单一职责”的原则,使工厂类既要负责对象的创建,又要负责产品的组装。

例如:我要创建奥利汽车的轮胎、发动机、底盘、车身,也要创建BYD汽车的轮胎、发动机、底盘、车身,那么在抽象工厂模式下,我有一个抽象工厂类这个工厂类定义了创建轮胎、发动机、底盘、车身四个接口,然后我有两个具体工厂类:奥迪汽车工厂类和BYD汽车工厂类,这个两个类实现了抽象工厂中的所有方法,可以创建四种产品。这大大减少了具体工厂类的数量,把有相互联系的四种产品放到一个类中加以联系,但是这个具体工厂类只负责创建四种产品,却不能将这四个产品组装起来,组装的工作需要客户端负责,使得客户端变得异常庞大。

抽象工厂模式案例详情请见:http://blog.csdn.net/tongyuehong137/article/details/45418163


创建者模式:创建者模式只是在抽象工厂模式上多加了组装类,这个组装类负责将一系列有相互关系的产品进行组装,这个组装类负责调用具体工厂类创建产品的方法,将产品创建并组装好,然后客户端直接调用这个组装类来生产一个整体的产品。

例如:我要创建奥利汽车的轮胎、发动机、底盘、车身,也要创建BYD汽车的轮胎、发动机、底盘、车身,那么在创建模式下,我在有抽象工厂模式下的所有抽象类和具体类的同时,我多了一个组装类,这个组装类调用具体工厂类创建部件,并把部件进行组合最终将结果返回给客户端。

创建者模式案例详情请见:http://blog.csdn.net/tongyuehong137/article/details/45419489


原型模式:原型模式是通过一个原型对象来表明要创建对象的类型,然后使用复制这个原型对象的方法来创建更多同类型的对象,在原型模式中可以动态地添加产品类,而且对整体结构没有影响。

例如:我要创建一辆BYD的汽车,那么我可能在流水线上会有一道工序是组装车身,然后第二道工序是在第一道工序的基础上(一个车身原型)加上一个轮胎,然后第三道工序在第二道工序上增加发动机,以此类推,每一道工序完成后产生了一个原型,下一道工序是相当于拷贝了前一道工序的结果原型,并在这个基础上再加上部件。

原型模式模式案例详情请见:http://blog.csdn.net/tongyuehong137/article/details/45422425


单例模式:单例模式就是确保一个类只有一个实例,并且该实例是自动创建,并可以向整个系统提供该实例,客户端只能调用一个公共接口来产生一个实例,而且只能产生一次。

单例模式模式案例详情请见:http://blog.csdn.net/tongyuehong137/article/details/45438817



1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 汽车租赁公司不退押金怎么办 身材不好怎么办健身教练形象照 反祈祷式做不到怎么办 窦性心跳过缓怎么办 四维彩超查出胎儿心脏有问题怎么办 减脂肚子饿了怎么办 做瑜伽腰扭到了怎么办 出了汗怎么办活动反思 农村都是老人和孩子怎么办 瑜伽垫容易出现痕迹怎么办 37岁失业了该怎么办 45岁找什么工作怎么办 华为手机4g网速慢怎么办 解析软件包时出现问题怎么办 一字马不能下去髋摆不正怎么办 练轮瑜伽骆驼式腰疼怎么办 感昌咳嗽老不好怎么办 我感昌一直不好怎么办 腰间盘突出晚上睡觉痛怎么办 天天吃撑了怎么办啊 一吸气就想咳嗽怎么办 鼻子堵住了怎么办没法吸气时 一只鼻子不通气怎么办 练瑜伽后特别饿怎么办 站一天小腿肿了怎么办 练腹肌腰粗了怎么办 大专不交学费.然后退学怎么办 练瑜伽压腿一字马受伤了怎么办 银行工作人员借钱不还怎么办 借钱不还跑了但有工作怎么办 亲戚家借钱不还怎么办 学习瑜伽教练口令好复杂怎么办 练瑜伽腿的柔韧性不够怎么办 瑜伽扭转时手抓不到脚怎么办 练瑜伽腿部太硬怎么办 褶皱衣服不紧了怎么办 吃撑了肚子涨怎么办 正好压本科线该怎么办 大脚趾被砸了怎么办 脊柱侧弯每天疼怎么办 内衣扣的位置脊柱疼怎么办