zoukankan      html  css  js  c++  java
  • 软件构造:设计模式对比

    static factory 和 abstract factory
    同:简化了创建的过程。主要解决接口选择的问题。
    不同:
    static Factory让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加。需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。
    abstarct factory围绕一个超级工厂创建其他工厂,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。有一系列的车,摩托车,汽车,生产厂商就是抽象工厂,福特就是具体工厂。摩托车有各种型号的,汽车也是。比如摩托车里的哈雷就是一个具体产品,汽车里的吉普就是具体的汽车产品。我们取车时买汽车送摩托,这时候就会生成一个具体汽车和摩托。

    工厂方法模式: 一个抽象产品类,可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类只能创建一个具体产品类的实例。 抽象工厂模式: 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类可以创建多个具体产品类的实例。 区别: 工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

    abstract factory 和 builder
    不同:builder
    主要解决在软件系统中,有时候面临着”一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。比如:去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的”套餐”。建造者模式更加关注与零件装配的顺序。

    2.抽象工厂模式与builder模式的对比

    • 两种模式有一个共同的特点,就是将对象创建过程与使用过程相分离,用户在使用时只需知道该创建什么,而无需知道对象是究竟如何创建的。这样对象创建和使用的过程之间就呈现一种松耦合的形式,当创建过程有改动的时候只需对创建过程进行无需对使用过程作出任何修改。
    • Builder隐藏了最终产品的实现细节,而Factory没有隐藏。Builder可以认为是将Factory再封装,所以,Builder没有Factory灵活,而Builder对于固定类型的对象创建更方便。消费者如果想要组装不同类型的东西,那只能使用Factory模式。

    bridge 和 strategy
    strategy:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。将这些算法封装成一个一个的类,任意地替换。
    bridge:于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。墙上的开关,可以看到的开关是抽象的,不用管里面具体怎么实现的。
    桥更注重低耦合,而strategy注重自由替换策略。但這两种封装性都好。

    3.桥接模式和策略模式的对比
    strategy模式是为了扩展和修改,并提供动态配置。它往往可以在同一环境当中使用不同的策略,就是调用不同的派生类。其内部实现是自由的,不受已有的类接口的限制。bridge模式是往往是为了利用已有的方法或类。它将原来不统一,不兼容的接口封装起来,变成统一的接口。它的应用往往是不同的环境或平台下只能选择一种,它的主要作用不是配置而是定义通用接口。

  • 相关阅读:
    前端开发者也可以酷酷地开发桌面程序
    手把手教你怎么搭建angular+gulp的项目(一)
    在Angular中,如果权限值是异步请求所得,如何将其设置为HTTP请求头的Authorization?
    AngularJs ng-repeat指令中怎么实现含有自定义指令的动态html
    第一篇随笔,练练手
    我参与 Seata 开源项目的一些感悟
    一次 kafka 消息堆积问题排查
    图解 Kafka 水印备份机制
    Seata 动态配置订阅与降级实现原理
    记一次 Kafka 集群线上扩容
  • 原文地址:https://www.cnblogs.com/hitWTJ/p/9865425.html
Copyright © 2011-2022 走看看